2013-11-01 2 views
1

Мне было интересно, что лучше всего подходит для class initialization.Инициализация класса - Собственность против поля

можно написать:

private myClass mc = new myClass(); 

Или:

private myClass mc { get; set; } 

public Foo() 
{ 
    mc = new myClass(); 
} 

Я всегда, как правило, использовать его в качестве field. Есть ли недостатки для использования класса как property? Я сделал некоторые поиски в google, но ни один из результатов не дал мне хорошего ответа на этот конкретный вопрос.

+0

Возможный дубликат [Разница между свойством и полем в C# 3.0+] (http://stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3- 0) – Kami

+0

Третий вариант заключается в том, что вы можете написать 'private myClass mc; public Foo() {mc = new myClass(); } ' –

+1

Это не дубликат. –

ответ

3

Если это частное лицо, нет никакой существенной выгоды в создании этого имущества. Я бы просто сохранил это как поле. Я использую свойства как способ передачи API с помощью других классов.

+0

Я пропустил тот факт, что собственность была частной, поскольку я никогда не видел, чтобы кто-то делал это раньше. Для частных объектов определенно нет преимуществ. –

+0

@DavidArno Я намеренно назначил их закрытыми, потому что я хотел знать, как «инициализация класса» должна выполняться в самом классе. Согласно ответам, я просто буду придерживаться «полевого пути» :) – DeMama

+0

@DeMama Хорошо для вас :) –

0

Ваше использование имущества во втором примере не нужно. Вы можете написать это как:

private myClass mc; 

public Foo() 
{ 
    mc = new myClass(); 
} 
0

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

0

Я perefer первый путь:

частный MyCLASS Мс = новый MyClass();

потому что:

  • частная собственность не имеет никаких преимуществ.
  • Если вы создаете другой конструктор, вы дублируете код инициализации, если вы не создаете какой-либо метод Init или не вызываете это(), что не так ясно, как просто инициализация поля.
Смежные вопросы