При назначении значения по умолчанию для поля (здесь false для bool) FxCop говорит:
Resolution : "'Bar.Bar()' initializes field 'Bar.foo'
of type 'bool' to false. Remove this initialization
because it will be done automatically by the runtime."
Теперь я знаю, что этот код как int a = 0
или bool ok = false
вводит некоторую избыточность, но мне это кажется очень, очень хорошей кодовой практикой, на которой, по моему мнению, праведно настаивали мои учителя.
Мало того, что снижение производительности очень мало, что еще более важно: полагаться на значение по умолчанию - значит полагаться на знания каждого программиста, когда-либо использовавшего фрагмент кода, для каждого типа данных, который поставляется со значением по умолчанию. (DateTime?)
Серьезно, я думаю, это очень странно: та самая программа, которая должна защищать вас от слишком очевидных ошибок, предлагает здесь сделать одну, только для некоторого повышения производительности? (здесь мы говорим о коде инициализации, выполняемом только один раз! Программисты, которым это небезразлично, могут, конечно, опустить инициализацию (и, вероятно, должны использовать C или ассемблер :-)).
Совершает ли FxCop очевидную ошибку или это еще не все?
Два обновления:
Это не только мое мнение, но и то, чему меня учили в университете (Бельгия). Не то чтобы мне нравилось использовать argumentum ad verecundiam, но просто чтобы показать, что это не только мое мнение. А по поводу этого:
Приношу свои извинения, я только что нашел вот это:
Должен ли я всегда / никогда / никогда не инициализировать поля объекта к значениям по умолчанию?