加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我可以在问题中提供的示例中删除属性设置器(没有任何问题)

发布时间:2020-12-16 01:43:19 所属栏目:百科 来源:网络整理
导读:在我的项目的现有代码中,属性的数量如下所示: public long ResourceID{ get { return this.resourceID; } set { if (this.resourceID != value) { this.resourceID = value; } }} 注意:已声明private long resourceID. 不仅属性类型的属性,也有引用类型(包
在我的项目的现有代码中,属性的数量如下所示:

public long ResourceID
{
    get
    {
        return this.resourceID;
    }
    set
    {
        if (this.resourceID != value)
        {
            this.resourceID = value;
        }
    }
}

注意:已声明private long resourceID.

不仅属性类型的属性,也有引用类型(包括字符串)的属性也被声明为这样.

另一个例子:

public Collection<Ability> Abilities
{
    get
    {
        return this.abilities;
    }
    set
    {
        if (value == null)
        {
            throw new ArgumentNullException("Abilities");
        }
        this.abilities = value;
    }
}

据我所知,第一个例子中的setter没有任何意义,if条件在那里毫无意义.所以我决定改变代码(作为重构的一部分)来使它们成为自动属性. (在第二个例子中,我需要setter,因为在那里处理异常.)

我想从这里的专家那里了解,是否将现有属性设置为自动属性(或者至少从setter中移除条件)是否会造成任何伤害?有时,开发人员可能不会注意到微妙的事情,而且某些变化也会产生副作用.这就是我问这个问题的原因. (我的图书馆在很多地方使用.)

注意:如果这纯粹是一个家庭作业问题,请告诉我.

解决方法

有一些边缘情况可能会造成伤害:

更改为自动实现的属性{get; set;}

如果您在任何时候使用基于字段的序列化(例如,BinaryFormatter),那么当更改为自动实现的属性时,这将会中断,因为字段名称将更改.这也将影响使用反射来访问(希望是私有的)字段的任何其他场景,但BinaryFormatter是这里混淆的最常见原因.

删除if测试

对于大多数数据类型(如long等)都可以使用,但是,如果将它与实现自定义相等操作的类型一起使用,您可能会发现在以前(使用if)报告的对象相等时,您突然交换引用不同的参考

第一个是更可能的问题.如果您正在使用BinaryFormatter,那么保留私有字段(byt可能会删除if测试).然后开始从BinaryFormatter重构代码; p

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读