避免在每次调用构造函数时实例化对象

本文关键字:构造函数 实例化 对象 调用 | 更新日期: 2023-09-27 18:19:01

我有一个PersonViewModel类并与Person User Control绑定。每次当我选择个人使用控制页面时,createPersonCommand, deletePersonCommand, viewPersonCommand总是会重新启动。有什么想法来创建这些命令一次吗?InitializePersonCollection方法除外,因为它将从数据库中检索最新日期。

我的上司对我的作业发表了意见,他也被提到了。

    private ICommand createPersonCommand;
    public ICommand CreatePersonCommand
    {
        get { return createPersonCommand; }
    }
    private ICommand deletePersonCommand;
    public ICommand DeletePersonCommand
    {
        get { return deletePersonCommand; }
    }
    private ICommand viewPersonCommand;
    public ICommand ViewPersonCommand
    {
        get { return viewPersonCommand; }
    }
    public PersonViewModel()
    {
        createPersonCommand = new DelegateCommand<object>(ExecuteCreatePersonCommand);
        deletePersonCommand = new DelegateCommand<object>(ExecuteDeletePersonCommand);
        viewPersonCommand = new DelegateCommand<object>(ExecuteViewPersonCommand);
        InitializePersonCollection();
    }

避免在每次调用构造函数时实例化对象

只要命令执行方法不是static,您就需要这样做。如果出于某种原因您可以将命令方法设置为static,那么您也可以将您的delegatecommand设置为static,并且只将静态实例分配给您的成员。

但是正如人们已经提到的那样,这是没有意义的。你的代码是一个很好的模式。没有理由改变它。

也许你应该检查一下这些命令是否放置得很好。是否每个人都需要它自己的命令,或者你需要命令在你的主视图模型得到一个人作为参数?这可能更有意义。

你可以使用"lazy-loading"。然后命令将按需实例化,并且不会影响从数据库加载数据的速度。

private ICommand createPersonCommand;
public ICommand CreatePersonCommand
{
    get {
        if (createPersonCommand == null) {
            createPersonCommand = new DelegateCommand<object>(ExecuteCreatePersonCommand)
        }
        return createPersonCommand;
    }
}