首先,为了澄清并避免不必要的重复标记,此问题不是 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#书中)
答案 0 :(得分:0)
根据我的理解,你所指的公共财产仅仅是包含上述模式的语法糖。
我认为这取决于可读性和平台标准。虽然您谈论的方式没有任何问题,但我们还需要考虑可维护性。对于另一个.Net开发人员来说,这种模式并不适合他们习惯使用的模式,可能引起混淆。
还有一个肤浅的原因,它只需要编写更多代码。特别是当你有像DTO这样的东西时。
答案 1 :(得分:0)
c#中的属性被进一步封装并最终转换为私有字段的中间语言和相应的Get Set方法,因此您不必为此烦恼
答案 2 :(得分:0)
自动访问器就是语法糖。生成的代码具有支持字段和get / set方法。菲尔德没有访问者,而属性则有。
公共/私有是关于封装/安全,即谁应该能够访问您的信息。
答案 3 :(得分:0)
您呈现它的方式(编写get
和set
方法)很好,但您有两种方法 - 一种用于设置字段的值,另一种用于获取此值。使用属性,对我来说更自然,因为你"封装"一个名称下的set
和get
方法以这种方式更好地访问它(在我看来)。
答案 4 :(得分:0)
使用public int AValue { get; set; }
代替私有字段以及getAValue
和setAValue
函数对的主要原因是,这就是在C#中完成工作的方式。来自"代码在运行时所执行的操作"从视角来看,这两者与" auto property"几乎相同。 (您让编译器负责生成私有支持字段的属性类型)编译成与您编写的代码非常相似的代码(请参阅this stackoverflow questions accepted answer示例) )。
主要优势"在你的问题的上下文中(为什么使用属性而不是字段和get / set方法对)是可预测性和可理解性。任何使用您的代码的人都期望看到属性,而不是私有字段/获取/设置实现,因此您的代码将更容易被他们理解。看到它以不同的方式实现会导致他们质疑为什么,假设它有一个原因,因此在理解你的代码时会减慢它们的速度。
答案 5 :(得分:0)
C#的getter和setter是语法糖,可以删除嘈杂的方法名称(SetValue
或GetValue
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"操作