公共属性而不是PRIVATE字段

时间:2017-07-06 04:42:05

标签: c#

首先,为了澄清并避免不必要的重复标记,此问题不是 this one的副本,既不是this other one的重复,也不是我已经搜索过的其他重复。为什么?他们都谈论公共字段或私有字段与经典C#" s"属性"。

我的问题是我为什么要写这样的东西(公共属性

class myClass{

public int AValue{get; set;}
}

当我可以改为编写时(私有字段 ,不涉及任何属性)(只是经典的旧C ++风格的写作方式)

class myClass{
private int aValue;
public int getValue{ return aValue;}
public void setValue(int value){ aValue=value;}

我正在挠头,阅读许多资源,答案和问题,而且没有人回答这个问题。他们都谈到了公共场所(我没有问过)的优势,或者说新的自动属性优于旧的属性(我也没有问过)。

我想我的问题是为什么C#不会使用在Java或C ++中运行良好的相同编写方式。我没有看到任何优势。我非常感谢有人教我优势,因为afaik不会写在其他任何地方。 (甚至不在我的C#书中)

6 个答案:

答案 0 :(得分:0)

根据我的理解,你所指的公共财产仅仅是包含上述模式的语法糖。

我认为这取决于可读性和平台标准。虽然您谈论的方式没有任何问题,但我们还需要考虑可维护性。对于另一个.Net开发人员来说,这种模式并不适合他们习惯使用的模式,可能引起混淆。

还有一个肤浅的原因,它只需要编写更多代码。特别是当你有像DTO这样的东西时。

答案 1 :(得分:0)

c#中的属性被进一步封装并最终转换为私有字段的中间语言和相应的Get Set方法,因此您不必为此烦恼

答案 2 :(得分:0)

自动访问器就是语法糖。生成的代码具有支持字段和get / set方法。菲尔德没有访问者,而属性则有。

公共/私有是关于封装/安全,即谁应该能够访问您的信息。

答案 3 :(得分:0)

您呈现它的方式(编写getset方法)很好,但您有两种方法 - 一种用于设置字段的值,另一种用于获取此值。使用属性,对我来说更自然,因为你"封装"一个名称下的setget方法以这种方式更好地访问它(在我看来)。

答案 4 :(得分:0)

使用public int AValue { get; set; }代替私有字段以及getAValuesetAValue函数对的主要原因是,这就是在C#中完成工作的方式。来自"代码在运行时所执行的操作"从视角来看,这两者与" auto property"几乎相同。 (您让编译器负责生成私有支持字段的属性类型)编译成与您编写的代码非常相似的代码(请参阅this stackoverflow questions accepted answer示例) )。

主要优势"在你的问题的上下文中(为什么使用属性而不是字段和get / set方法对)是可预测性和可理解性。任何使用您的代码的人都期望看到属性,而不是私有字段/获取/设置实现,因此您的代码将更容易被他们理解。看到它以不同的方式实现会导致他们质疑为什么,假设它有一个原因,因此在理解你的代码时会减慢它们的速度。

答案 5 :(得分:0)

C#的getter和setter是语法糖,可以删除嘈杂的方法名称(SetValueGetValue vs Value)并提高代码的可读性。

可读性在使用代码方面要好得多

// Without properties
var myClass = new MyClass();
myClass.SetAValue(aValue);
myClass.SetBValue(bValue);

//And with properties
var myClass = new MyClass 
{
    AValue = aValue,
    BValue = bValue
}

因为它只是语法糖 - 每个开发者/团队都可以自由使用 它。
有些团队有"规则"该属性应该仅用于获取/设置值而不需要任何"重" getter / setters中的逻辑。并且应该使用方法来设置或获取执行某些" heavy"操作