gpt4 book ai didi

c# - ICommand接口(interface)的高效使用

转载 作者:行者123 更新时间:2023-11-30 16:47:14 25 4
gpt4 key购买 nike

我正在开始一个使用 Xamarin Forms 进行移动应用程序跨平台开发的项目。我正在使用 MVVM 模型,除了几个小型 WPF 应用程序之外,我对它几乎没有经验。

我使用 ICommand 接口(interface)在 View 的 XAML 中创建命令并绑定(bind)到它们,默认情况下这涉及大量重复代码。 Xamarin.Forms 提供了 ICommand 的具体子类型 Command,它在讨论中使用 here ,我看到了两种显而易见的方法来实例化它们。

选项 #1 - 在构造函数中分配命令。

public class Presenter : ObservableObject
{
public Presenter()
{
DoStuffCommand = new Command(DoStuff);
}

public ICommand DoStuffCommand { get; set; }

private void DoStuff()
{
// VM stuff
}

}

选项 #2 - 在 getter 中实例化命令

public class Presenter : ObservableObject
{
public ICommand RunCommand { get { return new Command(DoStuff); } }

private void DoStuff()
{
// VM stuff
}

}

许多 View 模型将有许多命令,而方法 #2 避免在构造函数中将所有这些一一分配 - 当命令操作不会改变时,我更清楚地声明此操作ICommand 本身。另一方面,这将在每次命令触发时创建一个新的 Command 实例,这在内存方面显然不如方法 #1 有效。

有没有人有这方面的经验,和/或可以告诉我这是否会显着影响性能?有没有办法对此进行改进,例如手动销毁 Command 对象?

谢谢!

最佳答案

选项 #2 的替代方法是为它提供一个支持字段并确保它只实例化一次:

private ICommand _doStuffCommand;
public ICommand DoStuffCommand =>
_doStuffCommand = _doStuffCommand ?? new Command(DoStuff);

private void DoStuff()
{

}

关于c# - ICommand接口(interface)的高效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39838002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com