|
|
1
26
我们以前有过这个话题,但现在什么也找不到。 简而言之:你的需求可能会改变:如果现在没有理智检查,将来可能需要进行理智检查。但是,如果您将公共字段更改为属性,则会破坏二进制兼容性:使用您的代码/库的每个客户端都必须重新编译。 这是 坏的 从一开始就使用属性可以避免这个问题。这甚至适用于不属于库的代码。为什么?因为你永远不知道:代码(即使高度特定于领域!)可能会被证明是有用的,所以你想把它重构成一个库。如果你已经在使用属性来代替公共/受保护的字段,那么这个重构过程显然会变得容易得多。 此外,在C#3.0中编写公共属性很容易,因为你可以直接使用自动实现的属性,从而节省大量代码:
将为您实现必要的支持字段和getter/setter代码。 我将添加一个个人注释:。NET在这方面的行为有点懒散。编译器可以动态地将公共字段更改为属性,从而避免了这个问题。VB6已经为COM公开的类做了这件事,我认为VB.NET和C#绝对没有理由不这样做。也许编译器团队中的某个人(Jared?)可以对此发表评论。 |
|
2
8
|
|
|
3
4
Jeff Atwood has blogged about it :
|
|
4
3
将来将字段更改为属性被认为是 突破性变化 字段被视为类的实现细节,公开它们会破坏封装。 |
|
|
5
2
属性的使用使您的代码更加面向对象。通过公开成员变量,您可以公开您的实现。 另请参见此 link C#编程指南 |
|
|
6
1
您还可以使用属性保护写访问权限并允许读访问权限:
|
|
|
7
0
如果你在一个封闭的环境中工作——你不开发SDK,所有的类都在同一个项目框架内使用——没有区别。
使用公共字段更易读,装饰更少,更易于使用。 |
|
|
8
0
对。 考虑一个现在包含字符串的公共变量,你可以简单地设置它。但是,如果你决定该公共变量应该包含一个应该用字符串初始化的对象,那么你就必须使用原始对象更改所有代码。但是,如果您使用了setter,则只需更改setter即可使用提供的字符串初始化对象。 |
|
|
tomm · 谷歌表格-将两列相乘,复制第三列 3 年前 |
|
|
ziemsterr · 无法在SQL SELECT语句中找出此语法错误 3 年前 |
|
|
Andrés BolÃvar · AJAX请求未收到我想要的属性 3 年前 |
|
|
clarkk · 当声明向量时,(1)是什么意思? 3 年前 |
|
|
Mike C. · Bash错误[:检查文件是否存在时缺少“]” 3 年前 |
|
|
michael · 错误的脚本和语法问题 3 年前 |