本文介绍了属性和变量有什​​么区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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:

这篇关于属性和变量有什​​么区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 12:57