在返回值的情况下,哪一种更好?
public int EmployeeAge
{
get{return intEmployeeAge};
}
而且
public int EmployeeAge()
{
return intEmployeeAge;
}
哪个更好,为什么?在像上面这样的场景中使用最佳编程实践是什么?在返回值的情况下,哪一种更好?
public int EmployeeAge
{
get{return intEmployeeAge};
}
而且
public int EmployeeAge()
{
return intEmployeeAge;
}
哪个更好,为什么?在像上面这样的场景中使用最佳编程实践是什么?属性是表示对象特征的一种有用方式,允许使用诸如数据绑定、反射和序列化等API共同使用get/set。因此,对于对象的简单值而言,属性非常方便。属性不能带有参数,不应具有重大的副作用*,并且应快速且可重复地返回。另外,不存在“扩展属性”(以反映扩展方法)或通用属性。
(*=懒加载等不常见情况除外)
方法(C#没有函数)更适合表示改变状态的内容,或者其期望需要花费一些时间并且不一定能够复现的内容。它们通常无法在绑定/序列化等方面使用。
请注意,属性实际上只是编写方法的一种特殊方式。在功能上几乎没有区别。这完全取决于表达意图。然而,您不想公开的一件事是字段(实际的intEmployeeAge
实例变量)。
所以我会这样做:
public int EmployeeAge { get{return intEmployeeAge}; }
或者只需在Employee
对象上执行以下操作:
public int Age { get{return intEmployeeAge}; }
当然...那问题就变成了“以什么单位计算?” 我假设是年?
如果你只需要返回一个值,使用属性。
如果在返回值之前需要执行某些操作,请使用函数。
e.g
Obejct1 o = new Object1();
o.P1;
o.P2;
o.P3;
从API中无法判断你能否对公共API进行更改或它是否是只读属性,除非你使用显示可行操作的小图标的IDE。
Object1 o = new Object1();
o.GetP1();
o.SetP2();
o.SetP3();
通过API,可以轻松地找到数据如何被类型的客户端更改。
属性是以简单的方式探索类内部数据元素的一种方式。我们可以使用类型安全的get和set方法实现属性。属性是通过调用约定隐式调用的。属性在编译时和运行时都起作用。
方法是包含一系列语句的代码块。方法是显式调用的。方法在运行时起作用。
我认为这与你所编程的文化有很大关系。在我看来,C#/.NET文化会更倾向于在这种情况下使用属性。
我的建议是:尽量与你正在使用的主要库保持一致。
但是:要注意不要过度使用属性(或者像你上面的例子中服务于同样目的的函数),因为它们通常是糟糕设计的标志。你想要“告诉”你的对象去做事情,而不是“询问”它们的信息。不要对此过于固执,只需意识到这是代码异味即可。
get
/set
是方法。在幕后,实际上是get_Age
和get_EmployeeAge
。 - Marc Gravell