2011-12-31 1 views
3

Моя программа имеет несколько классов и 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()); 
     } 
    } 

Моя основная форма создает экземпляры как формы настроек, так и класса журнала. Мой класс настроек также создает экземпляр объекта журнала. Проблема, которую я сейчас имею в том, что класс журнала выполняет некоторую проверку на основе записей из класса настроек, однако я не могу вызвать объект класса настроек, так как он вызывает класс журнала, или я заканчиваю бесконечным циклом. Вот подтверждение, которое оно делает.

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 из любой формы, но, как показано выше, существует некоторая проверка, которая происходит на основе записей одной из форм, вызывающих класс журнала. Что может быть хорошим решением для этого, если я не могу использовать файл журнала как статический класс (я не очень хорошо понимаю статические классы, поэтому я спрашиваю).

ответ

2

Да, LogClass может быть абсолютно статичным и, фактически, если он доступен из нескольких мест, вероятно, это лучше.

Однако вам необходимо изменить способ настройки параметров формы в класс журнала. Вам нужно либо добавить статические свойства в класс журнала, чтобы хранить значения из форм, либо вам нужно передать значения из форм методам в классе журнала.

Например, если пользователь очищает chbxLogScanResults в форме настроек, то вы можете либо немедленно обновить LogClass с этой информацией, либо сохранить форму настроек (я предпочитаю делать это при сохранении, чтобы, если пользователь отменяет изменения в форме, вы неправильно записываете предпочтения).

2

Статический класс - это класс, члены которого являются статическими. Ничего особенного.

У вас должен быть статический, видимый в глобальном масштабе механизм ведения журнала, который просто делегирует инстанцию, которая выполняет настоящую работу.

Код регистрации должен работать с настройками по умолчанию, чтобы он работал даже до того, как были загружены настройки.

Одно заключительное примечание: открытие FileStream s и s StreamWriter до того, как if() заявление, и закрывать их внутри тела if() заявления, это ужасная идея. Вместо этого используйте вместо этого ключевое слово using.

 Смежные вопросы

  • Нет связанных вопросов^_^