c# – 我可以在问题中提供的示例中删除属性设置器(没有任何问题)
在我的项目的现有代码中,属性的数量如下所示:
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |