Kon*_*lph 26
我们之前有过这个主题,但现在找不到任何东西.
简而言之:您的需求可能会发生变化:现在没有健全性检查,将来可能需要检查.但是,如果将公共字段更改为属性,则会破坏二进制兼容性:使用您的代码/库的每个客户端都必须重新编译.
这很糟糕,因为它可能会花费很多钱.
从一开始就使用属性可以避免此问题.这甚至可以计算不属于库的代码.为什么?因为您永远不会知道:代码(即使是高度特定于域的!)可能证明是有用的,因此您希望将其重构为库.如果您已经使用属性代替公共/受保护字段,那么这种重构过程显然会变得更加容易.
此外,在C#3.0中编写公共属性很容易,因为您可以使用自动实现的属性,从而为您节省大量代码:
public DataType MyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
将为您实现必要的支持字段和getter/setter代码.
我将添加一个个人注释:.NET在这方面的行为有点懒惰.编译器可以只是动态地将公共字段更改为属性,从而避免问题.VB6已经为COM暴露的类做了这个,我认为没有理由让VB.NET和C#不做同样的事情.也许编译团队中的某个人(Jared?)可以对此发表评论.
简而言之:
有充分的理由来创建一个微不足道的财产,正如上面所描述的:
- 反射在变量和属性上的工作方式不同,所以如果你依赖反射,使用所有属性会更容易。
- 您不能对变量进行数据绑定。
- 将变量更改为属性是一项重大更改。
很遗憾,变量和属性之间有这么多无意义的摩擦;大多数时候他们做完全相同的事情。Kevin Dente提出了一些新的语法,可以让我们两全其美:
Run Code Online (Sandbox Code Playgroud)public property int Name;然而,如果变量和属性之间的区别是一个持续存在的问题,我想知道是否有更激进的解决方案。我们不能完全抛弃变量而支持属性吗?属性和变量做的事情不是完全一样,但对可见性有更好的粒度控制吗?
| 归档时间: |
|
| 查看次数: |
14310 次 |
| 最近记录: |