2011-12-31 9 views
3

私のプログラムには、いくつかのクラスと2つのフォームがあります。私の最初のフォーム "Main"には、2番目のフォーム "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()メソッドを呼び出せますが、上記のように、ログクラスを呼び出すフォームのエントリに基づいて何らかのチェックが行われます。私は静的クラスとしてログファイルを使用することができない場合は、これを試す良い解決策かもしれません(静的なクラスは非常によく私の尋ねるので理解しません)。

答えて

2

はい、LogClassは絶対に静的であり、実際に複数の場所からアクセスされている場合は、おそらくそれが良いでしょう。

ただし、フォーム設定のログクラスへの伝達方法を変更する必要があります。フォームから値を格納するには、静的プロパティをログクラスに追加するか、フォームからログクラスのメソッドに値を渡す必要があります。

たとえば、ユーザーが設定フォームでchbxLogScanResultsをクリアした場合、この情報を使用してLogClassを直ちに更新するか、設定フォームが保存されたときに更新することができます(保存時に行うことをお勧めします。フォームへの変更は、環境設定を間違って記録しません)。

2

静的クラスは、メンバーがすべて静的である単なるクラスです。特別なものはありません。

実際のジョブを実行するインスタンス化されたものに単純に委譲する、グローバルに見える静的なロギング機能が必要です。

ロギングコードは、設定がロードされる前でも動作するように、デフォルト設定で動作する必要があります。

最後の注意:開口部FileStream sおよびif()文の前StreamWriter S、及びif()文の本体の内側に、それらを閉じて、恐ろしい考えです。代わりにusingキーワードを使用することを検討してください。

関連する問題