Установка значения свойства bool приводит к тому, что «Конструктор содержит цепочку вызовов, которая приводит к вызову виртуального метода, определенного классом».

#c#

Вопрос:

У меня есть ExampleViewModel класс, который наследует ViewModelBase класс от Mvvmlight . В этом классе у меня есть различные свойства, которые объявляются следующим образом:

public bool SomeBool { get; set; } = true;

 Warning CA2214
'ExampleViewModel.ViewModel(IWindowService, IDialogService, IDataService)' contains a call chain that results in a call to a virtual method defined by the class. Review the following call stack for unintended consequences: 

ExampleViewModel..ctor(IWindowService, IDialogService, IDataService)
ExampleViewModel.SomeBool(Boolean):Void
ObservableObject.RaisePropertyChanged(String):Void  
 

Я не перезаписывал RaisePropertyChanged в своем производном классе.

Если я изменю объявление свойства на just: public bool SomeBool { get; set; } и вместо этого внесу this.SomeBool = true; в конструктор производного класса, предупреждение исчезнет.

Чем отличаются эти два заявления, и следует ли мне беспокоиться об этом предупреждении?

Комментарии:

1. Это выглядит как ложное срабатывание. SomeBool не является виртуальным и не вызывает никаких виртуальных методов, поэтому это не должно вызывать проблем.

2. Многие пользователи Mmmvlight очень раздражены тем, что они не могут написать простые автоматические свойства. Если вы что-то сделали с этим, скажем, с таким рерайтером IL, как PostSharp, вам нужно упомянуть об этом.

3. Я использую Фоди. Свойство изменено, чтобы избежать всех OnPropertyChanged шаблонов.