Mvvm交叉命令模式

MvvmCross Command Pattern

我一直注意到示例中出现了 ICommand 属性的两个相似模式,具体如 MvvmCross wiki https://github.com/MvvmCross/MvvmCross/wiki/Databinding#rio:

中所示
private ICommand _submitCommand;
public ICommand SubmitCommand
{
    get
    {
         _submitCommand = _submitCommand ?? new MvxCommand(DoSubmit);
         return _submitCommand;
    }
}

并且没有后备存储和空合并运算符,例如:

public ICommand SubmitCommand
{
    get
    {
         return new MvxCommand(DoSubmit);
    }
}

哪个是首选,为什么?

第一个版本只是减少了创建对象的数量,因为无论命令 属性 被访问多少次,都只会存在一个实例。

在大多数情况下,这可能没有太大区别。大多数人使用代码片段来生成代码,因此无需任何额外的输入即可生成正确的代码。