c# - 我怎么知道一个类是否可以用作静态类?

标签 c# object logging static infinite-loop

我的程序有几个类和 2 个表单。我的第一个表单“Main”有一个按钮将显示第二个表单“formSettings”和一个将打开日志文件的按钮。

FormSettings formSettings = new FormSettings();
LogClass objectLog = new LogClass();

public void settingsToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        //shows the settings form
        formSettings.Show();            
    }


private void viewLogToolStripMenuItem1_Click(object sender, EventArgs e)
    {            
        try
        {
            objectLog.OpenLogFile();
        }
        catch (Exception ee)
        {
            objectMessageBox.ReturnErrorOpeningLogPrompt(ee.ToString());
        }
    }

我的主窗体创建了设置窗体和日志类的实例。我的设置类还创建了 Log 对象的一个​​实例。我现在遇到的问题是日志类根据设置类中的条目进行一些验证,但是我不能调用设置类的对象,因为它调用日志类或者我最终会陷入无限循环。这是它所做的验证。

public void Write_Log_Data(string data)
    {
        //Create an outfile stream
        FileStream outfile = new FileStream(fileLocation,
            FileMode.Append, FileAccess.Write);
        StreamWriter writer = new StreamWriter(outfile);

        if (objectSettings.chbxLogScanResults.Checked == true)
        {
            if (data == null || data == "")
            {
                //this is for logging ip addresses
                writer.WriteLine(Properties.Settings.Default.IPAddressNew + CONST_TAB +
                    GetDateTime());

            }
            //because logs containing errors or changed ips are not null data they trigger this section
            else
            {
                //the error was already formatted so just write it
                writer.WriteLine(data);
            }

            //close our writers
            writer.Close();
            outfile.Close();
        }
    }

我想知道日志文件应该是静态的吗?可以是静态的吗?我希望能够从任何一种形式调用作为 LogClass 一部分的 LogOpen() 方法,但如上所示,根据调用日志类的一种形式的条目进行了一些检查。如果我不能将日志文件用作静态类(我不太了解静态类,因此我会问),尝试这个可能是一个好的解决方案。

最佳答案

是的,LogClass 绝对可以是静态的,事实上,如果从多个位置访问它,它可能更好。

但是,您需要更改表单设置与日志类的通信方式。您需要向日志类添加静态属性以存储表单中的值,或者您需要将表单中的值传递给日志类中的方法。

例如,如果您的用户在您的设置表单中清除了 chbxLogScanResults,那么您可以立即使用此信息更新 LogClass,或者在保存设置表单时更新 LogClass(我更喜欢在保存时这样做,这样如果用户取消表格的更改,您不会错误地记录首选项)。

关于c# - 我怎么知道一个类是否可以用作静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691000/

相关文章:

c# - 使用 POCO 模板获取 Entity Framework 的连接字符串

c# - 我可以将 int 转换为 C# 枚举类型吗?

java - 如何确定对象类型而不迭代所有可能的类型?

linux - 如何在 apache 日志的文件名中包含服务器名称?

c# - 这个 LINQ 表达式可以从方法语法转换为查询语法吗?

c# - 每当创建新类时,向 asp 项目添加命名空间

python - 如何在Python中确定对象的值

javascript - 如何在 javascript 中调用未命名的实例?

java - Log4j2-JDBC Appender

c# - 你如何模拟 ILogger LogInformation