Я вполне уверен, это прекрасно, но если Ваше взволнованное Вы могли бы всегда просто присваивать свойства после параметра меньше вызова конструктора.
Это в порядке в этом образце, но это могло бы вызвать проблемы, когда Вы наследовали класс и переопределяете свойства. Обычно можно лучше создать поля для виртуальных свойств.
Подробно остановиться на ответе Paco:
В большинстве случаев это не причиняет боль. Но если класс наследован, виртуальный, позволяет свойствам, get/set быть переопределенными, таким образом, поведение полностью больше не инкапсулируют и управляют, таким образом, это может повредиться в теории. FxCop предупреждает об этом, потому что это - потенциальная проблема.
точка FxCop должна помочь предупредить Вас о потенциальных проблемах все же. Это не неправильно для использования свойств в конструкторе, если Вы знаете Вас, кто/какой когда-либо собирается наследоваться классу, но это не официально 'лучшая практика'.
Так, ответ - то, что это прекрасно, пока Вы управляете любым наследованием класса. Иначе не используйте его и устанавливайте значения полей непосредственно. (Что означает, что Вы не можете использовать автоматический C# 3.0, получают/устанавливают свойства - необходимо будет записать поля обертывания свойств сами.)
примечание Стороны: Лично, все мои проекты являются веб-сайтами, которые мы размещаем для клиентов. Так принятие этой установки остается таким же для проекта, чем это стоит компромисса необходимости копировать различный пустой указатель/проверку аргументов. Но, в любом другом случае, где я не уверен, что мы обеспечим полный контроль над проектом и использование класса, я не взял бы этот ярлык.
Я думаю, Вы не должны называть его в конструкторе. Можно обеспечить, метод Инициализируют (), который можно назвать после построения объекта.
В Инициализируют (), можно назвать необходимые виртуальные методы
Я знаю, что FxCop жалуется, называете ли Вы виртуальный метод в своем конструкторе, но я не знаю то, что заявляет FxCop, называете ли Вы виртуальное свойство в своем конструкторе...
я думал бы, что FxCop будет жаловаться также, так как свойство переводится в метод в IL.
можно также создать свойства как 'невиртуальные', и просто указать 'lazy=false' на 'классе, отображающемся' в NHIbernate. Это не будет влиять на поведение ленивой загрузки наборов.
(я делаю все это время, так как мне не нравится та моя инфраструктура (NHibernate), требует, чтобы у меня были виртуальные свойства.
я также не знаю, является ли выигрыш в производительности наличия динамических прокси в NHibernate значительным).