Если вы используете 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, которые вообще не выполняют эту типизацию). Поэтому я хотел упростить его и немного выкопать. Я установил точку останова в первой строке блока {} и увидел, что она только попала, когда мое приложение было впервые загружено - я могу позже сбить столько команд, сколько захочу, и эта точка останова никогда не попадает - так что я хотел упростить это, чтобы удалить некоторый беспорядок из моих ViewModels и заметил, что следующий код работает одинаково:
public ICommand SaveCommand
{
get
{
return new RelayCommand(param => this.Save(), param => this.CanSave );
}
}
Однако я не знаю достаточно о С# или сборщике мусора, чтобы узнать, могут ли это вызвать проблемы, например, в некоторых случаях создавать избыточный мусор. Будет ли это представлять какие-либо проблемы?