Если вы используете MVVM и используете команды, вы часто будете видеть свойства ICommand в ViewModel, которые поддерживаются частными полями RelayCommand или DelegateCommand, как, например, в этом примере из исходной статьи MVVM на MSDN :
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave );
}
return _saveCommand;
}
}
Тем не менее, это много беспорядка и делает настройку новых команд довольно утомительной (я работаю с некоторыми опытными разработчиками WinForms, которые возражают против такой типизации). Поэтому я хотел упростить это и немного покопался. Я установил точку останова в первой строке блока get {} и увидел, что он получил удар только при первой загрузке моего приложения - позже я могу запустить столько команд, сколько захочу, и эта точка останова никогда не попадет - поэтому я хотел упростить это, чтобы убрать помехи из моих ViewModels и заметил, что следующий код работает так же:
public ICommand SaveCommand
{
get
{
return new RelayCommand(param => this.Save(), param => this.CanSave );
}
}
Однако я не знаю достаточно о C # или сборщике мусора, чтобы знать, может ли это вызвать проблемы, такие как генерация избыточного мусора в некоторых случаях. Это создаст проблемы?