当它返回值时,最好使用哪一个
public int EmployeeAge
{
get{return intEmployeeAge};
}
并且
public int EmployeeAge()
{
return intEmployeeAge;
}
哪一个更好,为什么?当我们有像上面这样的secnario时,最好的编程习惯是什么?
答案 0 :(得分:30)
属性是表达对象特征的有用方式,允许以通用方式获取/设置,可以由API使用,如数据绑定,反射和序列化。因此,对于对象的简单值,属性很方便。属性不能带参数,不应该有明显的副作用*,并且应该快速且可重复地返回。此外,没有“扩展属性”(镜像扩展方法)或通用属性。
(* =延迟加载等并不罕见)
方法(C#没有函数)更适合表达更改状态,或者期望花费一些时间而不一定是可重现的事物。它们不倾向于在绑定/序列化等方面工作。
请注意,属性实际上只是编写方法的一种特殊方式。 功能差异很小。这完全是关于表达意图。但是,不要公开的一件事是 fields (实际的intEmployeeAge
实例变量)。
所以我会:
public int EmployeeAge { get{return intEmployeeAge}; }
或仅(如果在Employee
对象上):
public int Age { get{return intEmployeeAge}; }
当然......然后问题变成“在什么单位?”我认为那是几年?
答案 1 :(得分:6)
如果您只需要返回一个值,请使用属性。
如果在返回值之前需要执行某事,请使用函数。
答案 2 :(得分:4)
答案 3 :(得分:2)
哪一个更好,为什么?什么是我们拥有的最佳编程实践 如上所述的secnario?
我用C#编写,但我更喜欢使用Get / Set函数,对我而言,这是表达我可以从对象获得什么以及如何更改它的状态的更好方法(这种方法在Intelisense中按字母表分组,这是也很好)。但是,如果团队更喜欢其他约定,这不是问题,但是当我处理自己的项目时,更容易阅读API。
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轻松找到类型客户端如何更改数据。
答案 4 :(得分:1)
方法在工作完成后返回值,值是完成工作的结果。我不认为这就是你在做什么。
属性(访问者)用于返回变量,这似乎是您要实现的目标:
根据MSDN:
属性的访问者包含 相关的可执行语句 获取(阅读或计算)或 设置(写)财产。该 访问器声明可以包含一个 获取访问者,设置访问者或两者。 声明如下 形式:
public int EmployeeAge
{
get;
set;
}
拥有look here,因为它可以很好地描述这些用途。
答案 5 :(得分:1)
属性是一种以简单方式探索类的内部数据元素的方法。我们可以使用类型安全的get和set方法实现属性。使用调用约定隐式调用属性.Property在编译和运行时工作。
Method是一个包含一系列语句的代码块。显式调用方法。 方法适用于运行时。
答案 6 :(得分:1)
我参加这个派对有点晚了,但我只想提一下属性和无参数“get”方法之间的另一个令人惊讶的区别。正如@MarcGravell所说,延迟加载是使用属性时的常见模式,但要注意Heisenberg Watch Window问题!
答案 7 :(得分:0)
我认为这与您编程的文化有很大关系。正如我所看到的,C#/ .NET文化在这种情况下更喜欢使用属性。
我的建议:尽量与您正在使用的主库保持一致。
但:警惕使用属性(或用于相同目的的函数,如上例所示),因为它们通常是设计不良的标志。您希望告诉您的对象执行操作,而不是询问他们的信息。但是,请不要嫉妒这一点,只要注意这是一种代码味道。