何时使用属性和方法?

Dr.*_*son 12 .net c# coding-style

我是来自C++的.NET世界的新手,我正在努力更好地理解属性.我注意到在.NET框架中,Microsoft使用了所有地方的属性.使用属性而不是创建get/set方法是否有优势?当一个人应该使用属性时,是否有一般指南(以及命名约定)?

Dyk*_*kam 12

它是纯粹的语法糖.在后端,它被编译为普通的get和set方法.

因为惯例使用它,它看起来更好.

一些指导原则是,当它具有抛出异常或出错的高风险时,不要使用属性,而应使用明确的getter/setter.但一般来说,即使这样他们也会被使


Mar*_*ell 7

属性 get/set方法; 简单地说,它将它们形式化为单个概念(用于读取和写入),允许(例如)针对属性的元数据,而不是单个成员.例如:

[XmlAttribute("foo")]
public string Name {get;set;}
Run Code Online (Sandbox Code Playgroud)

这是一对get/set方法,但附加元数据适用于两者.它也,IMO,简单地使它更容易使用:

someObj.Name = "Fred"; // clearly a "set"
DateTime dob = someObj.DateOfBirth; // clearly a "get"
Run Code Online (Sandbox Code Playgroud)

我们没有重复我们正在进行获取/设置的事实.

另一个好处是它允许对属性(上面的"名称")进行简单的双向数据绑定,而不依赖于任何魔术模式(编译器保证的那些除外).


Eri*_*ert 6

有一本完整的书专门回答这些问题:Addison-Wesley的框架设计指南.有关何时选择属性与方法的建议,请参阅第5.1.3节.

本书的大部分内容也可以在MSDN上找到,但我觉得把它放在桌面上很方便.