2011-07-29 2 views
0

Я работаю над кодом CSharp, где в конструкторе мне нужно получить доступ к свойствам этого класса. Логически это выглядит хлопотно для меня, так как я буду получать доступ к свойствам объекта, который еще не строится.можем ли мы получить доступ к свойствам из конструктора

Его старый код с использованием версии C# 4.0 и я вроде как рефакторинг, поэтому я не могу перепроектировать все с нуля.

Благодаря

class employee 
{ 
    employee() 
    { 
    int square = count * count; 
    } 
    private int count {get;set;} 
} 

ответ

0

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

public class WhatClass 
{ 
    public WhatClass() 
    { 
     int theCount = Count; // This will set theCount to 0 because int is a value type 
     AProperty = new SomeOtherClass; // This is fine because the setter is totally usable 
     SomeOtherClass thisProperty = AProperty; // This is completely acceptable because you just gave AProperty a value; 
     thisProperty = AnotherProperty; // Sets thisProperty to null because you didn't first set the "AnotherProperty" to have a value 
    } 

    public int Count { get; set; } 
    public SomeOtherClass AProperty { get; set; } 
    public SomeOtherClass AnotherProperty { get; set; } 
} 
+1

Неправильно. Вы не получите 'NullReferenceException'; вы просто получите 'null'. – SLaks

+0

@SLaks: О да, да, спасибо. –

3

Там нет ничего плохого в том, что, за исключением того, что count всегда будет 0.

Существует (почти) нет такой вещи, как «частично построенный» объект в .Net, за исключением объекта, который не задал все свое состояние в конструкторе.

1

Если вы создаете класс, и ни одно из свойств не было установлено ранее в конструкторе, и ни одно из свойств не является статическим и не установлено в другом месте, значения будут по умолчанию или равны нулю, поэтому нет смысла получать то, что они содержат. В противном случае конструктор - идеальное место для того, чтобы придать вашим свойствам что-то.

0

Да, C# разрешить это, но когда-нибудь лучше иметь частное поле, которое обернуто публичным свойством и в методе класса работает только с полем. В вашем случае я бы рекомендовал удалить частную собственность и вместо этого использовать переменную поля класса. Если потребители вашего класса потенциально могут захотеть получить доступ к свойству - сделайте его общедоступным с помощью частного сеттера, этот вид свойства autmatic является другой альтернативой для поля privatr, завершенного свойством.

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