避免在每次调用构造函数时实例化对象
本文关键字:构造函数 实例化 对象 调用 | 更新日期: 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;
}
}