Это в порядке для вызова виртуальных свойств от конструктора объекта NHibernate?

19
задан rsenna 15 March 2011 в 16:03
поделиться

5 ответов

Я вполне уверен, это прекрасно, но если Ваше взволнованное Вы могли бы всегда просто присваивать свойства после параметра меньше вызова конструктора.

5
ответ дан 30 November 2019 в 05:18
поделиться

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

1
ответ дан 30 November 2019 в 05:18
поделиться

Подробно остановиться на ответе Paco:

В большинстве случаев это не причиняет боль. Но если класс наследован, виртуальный, позволяет свойствам, get/set быть переопределенными, таким образом, поведение полностью больше не инкапсулируют и управляют, таким образом, это может повредиться в теории. FxCop предупреждает об этом, потому что это - потенциальная проблема.

точка FxCop должна помочь предупредить Вас о потенциальных проблемах все же. Это не неправильно для использования свойств в конструкторе, если Вы знаете Вас, кто/какой когда-либо собирается наследоваться классу, но это не официально 'лучшая практика'.

Так, ответ - то, что это прекрасно, пока Вы управляете любым наследованием класса. Иначе не используйте его и устанавливайте значения полей непосредственно. (Что означает, что Вы не можете использовать автоматический C# 3.0, получают/устанавливают свойства - необходимо будет записать поля обертывания свойств сами.)

примечание Стороны: Лично, все мои проекты являются веб-сайтами, которые мы размещаем для клиентов. Так принятие этой установки остается таким же для проекта, чем это стоит компромисса необходимости копировать различный пустой указатель/проверку аргументов. Но, в любом другом случае, где я не уверен, что мы обеспечим полный контроль над проектом и использование класса, я не взял бы этот ярлык.

2
ответ дан 30 November 2019 в 05:18
поделиться

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

В Инициализируют (), можно назвать необходимые виртуальные методы

0
ответ дан 30 November 2019 в 05:18
поделиться

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

можно также создать свойства как 'невиртуальные', и просто указать 'lazy=false' на 'классе, отображающемся' в NHIbernate. Это не будет влиять на поведение ленивой загрузки наборов.

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

0
ответ дан 30 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: