一尘不染

属性和变量有什​​么区别

c#

我对理解属性和变量感到困惑

public class ABC()
{
    public int A;
    public int B { get; set; }
}

A和B之间的确切区别是什么?


阅读 277

收藏
2020-05-19

共1个答案

一尘不染

正如许多人指出的那样,A是一个 字段 ,B是一个 属性

真正的问题是,您为什么要关心以及使用什么?

我指的是Jonathan
Aneja
博客文章

(在VB中,但它也适用于C#;)

那么,为什么要对字段使用属性,有五个原因:

1.字段不能在接口中使用

您不能通过接口强制对象的公共合同中存在字段。对于属性,虽然效果很好。

2.验证

尽管您的应用程序当前可能不需要任何验证逻辑来​​设置特定值,但是更改业务需求可能需要稍后插入此逻辑。那时,将字段更改为属性对于API使用者来说是一项重大更改。(例如,如果有人通过反射检查您的班级)。

3.二进制序列化

如果使用二进制序列化,则将字段更改为属性是一项重大更改。顺便说一句,这是VB10的自动实现属性具有“可绑定”后备字段(即,您可以在代码中表示后备字段的名称)的原因之一-
这样,如果您将自动实现的属性更改为扩展的属性,您仍然可以通过保持背景字段名称相同来保持序列化兼容性(在C#中,您不得不更改它,因为它会生成具有不可绑定名称的背景字段)。

4.许多.NET数据绑定基础结构绑定到属性,但不绑定到字段

我已经听过双方关于这是否是一件好事的争论,但现实是这就是现在的工作方式。 (我的注意:WPF绑定适用于属性)

5.暴露公共场所[违反FxCop](http://msdn.microsoft.com/en-

us/library/ms182141(VS.80).aspx)

由于上述许多原因:)

可能还有更多原因。

我还想指出Jeff Atwood博客文章,并引用其中的一段话:

这里最重要的事情是避免编写无关紧要的代码。 围绕公共变量的属性包装器是毫无意义的代码的本质。

2020-05-19