#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
шаблонов.