说实话,公共变量和公共属性访问器有什么区别?

20

这个问题之前已经在这里回答过了:为什么属性很重要 - Roman
3个回答

19

公共属性访问器在未来能让你更加灵活。

如果你想为设置属性值添加验证,只需要编写非默认的setter。这不会影响其他代码。

另外,有时候你可能需要用代码替换默认的getter。对于公共变量来说,这可能会很麻烦。


谁会编写依赖于可见名称是变量还是属性的代码?这是我能想到的唯一原因,否则你可以只需更改它并重新编译。 - Мסž
1
如果你的公共变量在一个单独的二进制文件中,那该怎么办呢?当你将其更改为属性时,变量会消失,而你现在有两个生成的函数。你必须重新编译每个引用它的二进制文件。 - Rob
3
@Rob:所以属性受益主要适用于仅作为二进制文件提供的库?对于内部代码,没有那么多优势? - Мסž

5
除了其他答案之外,您还可以使用属性使值只读或仅设置:
public int Item { get; private set; } // read-only outside the class. Can only be set privately.

我曾经遇到过一些情况,后来决定要代理一个对象或添加AOP,这基本上需要属性。


1

公共属性通过公开的getter和setter方法访问字段和内部类代码。公共字段直接访问字段。

使用属性提供了一层抽象和设计的潜力(能够使set访问器受保护、私有)。

当指定属性且没有主体时,编译器会创建一个基础的私有字段来存储值。本质上:

private int item = 0;
public int Item {
get { return item; }
set {item = value; }
}

一般来说,我倾向于使用属性来公开暴露变量,而使用字段来私有化。如果该字段被频繁访问且速度是关键的设计要求,我可能会考虑使用字段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接