Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何知道类是否可以用作静态类?_C#_Object_Logging_Static_Infinite Loop - Fatal编程技术网

C# 如何知道类是否可以用作静态类?

C# 如何知道类是否可以用作静态类?,c#,object,logging,static,infinite-loop,C#,Object,Logging,Static,Infinite Loop,我的程序有几个类和两个表单。我的第一个表单“Main”有一个按钮,可以显示第二个表单“formSettings”,还有一个按钮可以打开日志文件 FormSettings formSettings = new FormSettings(); LogClass objectLog = new LogClass(); public void settingsToolStripMenuItem1_Click(object sender, EventArgs e) { //sho

我的程序有几个类和两个表单。我的第一个表单“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类根据settings类的条目进行一些验证,但是我不能调用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的一部分,但如上所示,根据调用log类的其中一个表单的条目进行一些检查。如果我不能将日志文件用作静态类(我不太了解静态类,因此我提出了这个问题),那么有什么好的解决方案可以尝试这样做呢?

是的,日志类可以绝对是静态的,事实上,如果从多个位置访问它,那么最好是静态的

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


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

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

您应该有一个静态的、全局可见的日志记录工具,它只需委托给一个执行实际工作的实例

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

最后一点注意:在
if()
语句之前打开
FileStream
s和
StreamWriter
s,然后在
if()
语句主体内关闭它们,这是一个糟糕的主意。考虑使用<代码>使用< /Cord>关键字代替.< /P>