gpt4 book ai didi

c# - MVVM属性怎么写?

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:45 25 4
gpt4 key购买 nike

对于 MVVM,我总是看到这两种属性方法:

    private int myProperty;
public int MyProperty
{
get { return myProperty; }
set
{
myProperty = value;
NotifyPropertyChanged("MyProperty");
}
}

    private int myProperty;
public int MyProperty
{
get { return myProperty; }
set
{
myProperty = value;
NotifyPropertyChanged(m => m.MyProperty);
}
}

第一个对 NotifyPropertyChanged 使用硬编码字符串,第二个对 NotifyPropertyChanged 使用 lambda 表达式。我不想就什么是更好的解决方案展开辩论,但我想了解这两种解决方案之间的区别。使用一个或另一个的后果是什么?

如果我错了请纠正我,但 lambda 表达式解决方案应该使用更多内存并且应该比硬编码字符串慢,因为基类的 NotifyPropertyChanged 方法使用委托(delegate)和反射。但是硬编码字符串解决方案可能会产生愚蠢的错误,因为它是一个字符串,没有任何迹象表明我正确地编写了它。

最佳答案

第二个表达式要么在属性名称更改时生成编译器错误,要么会自动更改(通过 VS 或 ReSharper 中的重命名支持)。

所以基本上,您获得了对属性名称的编译器支持。提供给通知的错误名称将意味着数据绑定(bind)将中断。对于字符串名称,这种破坏将是无声的。

在我看来,在小型 UI 中,选择无关紧要,但在具有大量 UI 层的大型应用程序中,从长远来看,对错误的额外支持可以带来返回。

性能不会有问题变慢,不要忘记,无论如何绑定(bind)都是反射驱动的。一如既往,性能是相对的。硬编码版本在技术上会更快,因为它不需要从元数据中反射(reflect)属性名称。我不确定要快多少。

关于c# - MVVM属性怎么写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522531/

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