首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果( sz != sz2 ) sz=sz2,为什么这段代码要做?

如果( sz != sz2 ) sz=sz2,为什么这段代码要做?
EN

Stack Overflow用户
提问于 2009-12-20 15:47:08
回答 5查看 274关注 0票数 1

我第一次创建了一个linq to sql classes。我决定看一下这个班级,发现了这个。

什么..。为什么( sz !=sz2) {sz= sz2;}。我不明白。为什么集合不能生成为this._Property1 = value

代码语言:javascript
复制
    private string _Property1;
    [Column(Storage="_Property1", CanBeNull=false)]
    public string Property1
    {
        get
        {
            return this._Property1;
        }
        set
        {
            if ((this._Property1 != value))
            {
                this._Property1 = value;
            }
        }
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-20 17:20:15

设置字段不会导致属性更改通知,所以这不是原因。

我猜想这个设计选择是由下面这样的东西驱动的:

该字符串是一个不可变的引用类型。因此,原始实例和新实例是可以互换的。但是,原始实例可能存在的时间更长,因此收集的平均成本可能会稍微高一些(*)。因此,如果保留原始实例而不是替换为新的相同实例,性能可能会更好。

(*)在大多数情况下,新值只是刚刚分配,在设置属性后不会被重用。因此,收集起来非常有效的通常是Gen0对象,而原始值的GC生成是未知的。

如果这个推理是正确的,我不希望看到值类型属性(int,double,DateTime,...)也有同样的模式。

当然,这只是一种猜测,我可能完全错了。

票数 3
EN

Stack Overflow用户

发布于 2009-12-20 15:51:03

它仅在属性发生更改时更新属性。这可能是基于这样的假设,即比较比更新可能涉及的引用(以及所有相关的内存管理)的成本更低。

票数 5
EN

Stack Overflow用户

发布于 2009-12-20 17:49:01

你在哪里看到的?通常LINQ-to-SQL生成的属性如下所示:

代码语言:javascript
复制
private string _Property1;
[Column(Storage="_Property1", CanBeNull=false)]
public string Property1 {
    get {
        return this._Property1;
    }
    set {
        if ((this._Property1 != value)) {
           this.OnProperty1Changing(value);
           this.SendPropertyChanging();
           this._Property1 = value;
           this.SendPropertyChanged("Property1");
           this.OnProperty1Changed();
       }
    }
}

现在很明显,设备是为了避免在属性实际上没有更改时发送属性更改/更改通知。

现在,事实证明,OnProperty1ChangingOnProperty1Changed都是partial方法,所以如果你不在其他地方为它们声明一个主体,对这些方法的调用将不会被编译到最终的程序集中(所以,如果你在Reflector中寻找,你就不会看到这些调用)。但是SendPropertyChangingSendPropertyChanged是无法编译出来的protected方法。

那么,您是否更改了阻止代码生成器发出属性更改/更改通知的设置?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1935164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档