2015-09-30 3 views
0

Могу ли я использовать экземпляр класса один в другом классе и файле без необходимости его повторного использования?C# Использовать экземпляр класса в другом классе/файле

class Start 
{ 
    public static Log Log = new Log(...); 
} 

class Start1 
{ 
    Log.Write("New instance!"); 
} 

Я читал о том, чтобы использовать get/set блок, чтобы сделать это, но я точно не знаю, как бы я идти о том, что

+1

'Start.Log.Write (...)' –

+1

Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он слишком прост – Amit

+1

@AndreyNasonov - прочитайте код еще раз. – Amit

ответ

3

Синглтон картина:

public class Log 
     { 
      private static Log instance; 

      private Log() { } 

      public static Log Instance 
      { 
       get   
       { 
        return instance ?? (instance = new Log());    
       } 
      } 
     } 

Использование он, вызывая Log.Instance и т. д.

Для вызова этого с помощью параметра, вам нужно сделать что-то вроде этого:

public class Log 
     { 
      private string foo; 

      private static Log instance; 

      public static Log Instance 
      { 
       get 
       { 
        if (instance == null) 
        { 
         throw new InvalidOperationException("Call CreateInstance(-) to create this object"); 
        } 
        else 
        { 
         return instance; 
        } 
       } 
      } 

      private Log(string foo) { this.foo = foo; } 

      public static Log CreateInstance(string foo) 
      { 
       return instance ?? (instance = new Log(foo)); 
      } 
     } 

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

+0

Как бы это изменить, чтобы иметь возможность передавать аргументы в 'new Log();'? Кроме того, он отлично работает, но мне нужны аргументы, или это приведет к сбою моего приложения. – dragonbanshee

+0

В целом, одиночные игры, как правило, плохой идеей, особенно если вы передаете параметры конструктору, все дело в том, чтобы гарантировать, что только один из этих типов будет использоваться в вашем приложении и т. Д. Однако нет ничего, что помешает вам добавить public Write (string foo) в одиночном классе. Вы использовали бы это как Log.Instance.Write («Новый экземпляр»); например. Вы можете смотреть на другие шаблоны, например, на инверсию инъекции управления/зависимости. –

+0

Мне нужно передать аргументы в конструктор, а не методы (ну, да, но это уже работает). – dragonbanshee

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