问题描述
我对理解属性和变量感到困惑
I have a confusion about understanding Property and Variables
public class ABC()
{
public int A;
public int B { get; set; }
}
A和B之间的确切区别是什么?
What is the exact difference between in A and B?
推荐答案
正如许多人指出的那样,A是字段,B是属性 。
As many have pointed out, A is a field, B is a property.
真正的问题是,为什么要关心以及使用什么?
The real question is, why should you care, and what to use?
我指的是:
(在VB中,但它也适用于C#;))
(Its in VB, but it applies to C# as well ;))
为什么在字段上使用属性,5原因:
So why use properties over fields, 5 reasons:
当前您的应用可能需要
不需要任何验证逻辑,以便
设置特定值,而更改
业务要求则可能需要插入
这个逻辑以后。在那个
点上,将字段更改为属性
对于API的
使用者来说是一个重大变化。 (例如,如果某人是
通过反思检查您的课程)。
While your application currently maynot require any validation logic toset a particular value, changingbusiness requirements may requireinserting this logic later. At thatpoint changing a field to a propertyis a breaking change for consumers ofyour API. (For example if someone wasinspecting your class via reflection).
如果您使用二进制
序列化,则将字段更改为属性是一项
的重大更改。顺便说一句,这是
的原因之一,VB10的
自动实现属性具有
个可绑定后备字段(即,您可以
表示后备字段$ b $的名称)代码中的b)–这样,如果您将
自动实现的属性更改为
扩展的属性,则仍可以
保持序列化兼容性
,方法是保留后备字段名称
相同(在C#中,您不得不将其更改为
,因为它会生成具有不可绑定名称的后备字段
)。
Changing a field to a property is abreaking change if you’re using binaryserialization. Incidentally, this isone of the reasons VB10’sauto-implemented properties have a"bindable" backing field (i.e. you canexpress the name of the backing fieldin code) – that way, if you change anauto-implemented property to anexpanded property, you can stillmaintain serialization compatibilityby keeping the backing field name thesame (in C# you’re forced to change itbecause it generates backing fieldswith unbindable names).
我在两边都听到
的争论,那就是$ b $是否是一件好事b,但事实是
现在就是这样。 (请注意:WPF绑定适用于属性)
由于
上面列出的许多原因:)
For many of the reasons listed above:)
可能还有更多原因。
我还要指向,并引述其引用:
I would also like to point to a blog post of Jeff Atwood and conclude with a quote from it:
这篇关于属性和变量有什么区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!