如何知道一个类是否可以用作静态类?

本文关键字:静态类 是否 何知道 一个 | 更新日期: 2023-09-27 18:19:06

我的程序有几个类和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());
        }
    }

My Main表单创建了Settings表单和Log类的实例。我的settings类还创建了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();
        }
    }

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

如何知道一个类是否可以用作静态类?

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

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

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

静态类就是其成员都是静态的类。没什么特别的。

你应该有一个静态的、全局可见的日志工具,它可以简单地委托给一个实例化的工具来完成真正的工作。

日志代码应该能够使用默认设置,以便在加载设置之前使其能够工作。

最后一个注意事项:在if()语句之前打开FileStream s和StreamWriter s,并在if()语句的主体内关闭它们,这是一个糟糕的主意。考虑使用using关键字。