属性与方法的区别

例如,当它返回值时哪一个更好用

public int EmployeeAge { get{return intEmployeeAge}; } 

 public int EmployeeAge() { return intEmployeeAge; } 

哪一个更好,为什么? 当我们有像上面这样的secnario时,最好的编程习惯是什么?

属性是表达对象特征的有用方式,允许以通用方式获取/设置,可以由API使用,如数据绑定,reflection和序列化。 因此,对于对象的简单 ,属性很方便。 属性不能带参数,不应该有明显的副作用*,并且应该快速且可重复地返回。 此外,不存在“扩展属性”(镜像扩展方法)或通用属性。

(* =延迟加载等并不少见)

方法(C#没有函数)更好地表达要么改变状态,要么期望花费一些时间而不一定是可再现的东西。 它们不倾向于在绑定/序列化等方面工作。

请注意,属性实际上只是编写方法的一种特殊方式。 几乎没有function差异。 这完全是关于表达意图。 但是,您不想公开的一件事是字段 (实际的intEmployeeAge实例变量)。

所以我会:

 public int EmployeeAge { get{return intEmployeeAge}; } 

或者只是(如果在Employee对象上):

 public int Age { get{return intEmployeeAge}; } 

当然……然后问题变成“在哪个单位?” 我认为那是几年?

如果您只需要返回一个值,请使用属性。

如果在返回值之前需要执行某些操作,请使用函数。

属性包含对象数据

函数定义对象行为

看看 – > 物业使用指南

哪一个更好,为什么? 当我们有像上面这样的secnario时,最好的编程习惯是什么?

我用C#编写,但我更喜欢使用Get / Set函数,对我而言,这是表达我可以从对象获得的更好的方式以及如何更改它的状态(这种方法在Intelisense中按字母表分组,这也很好) 。 但是,如果团队更喜欢其他约定,这不是问题,但是当我在自己的项目上工作时,更容易阅读API。

 eg Obejct1 o = new Object1(); o.P1; o.P2; o.P3; 

从查看API,您不能说您在公共API中更改了什么或者它只是一个只读属性,除非您使用IDE向您显示一个小图标,显示您实际可以执行的操作。

 Object1 o = new Object1(); o.GetP1(); o.SetP2(); o.SetP3(); 

人们可以很容易地从API中找到类型的客户端如何更改数据。

工作完成后,方法返回值,值是完成工作的结果。 我不认为这就是你在做什么。

属性(访问器)用于返回变量,这似乎是您要实现的目标:

根据MSDN :

属性的访问器包含与获取(读取或计算)或设置(写入)属性相关联的可执行语句。 访问器声明可以包含get访问器,set访问器或两者。 声明采用以下forms:

 public int EmployeeAge { get; set; } 

看看这里 ,因为它给出了这些用途的非常好的描述。

属性是一种以简单方式探索类的内部数据元素的方法。 我们可以使用类型安全的get和set方法实现属性。使用调用约定隐式调用属性.Property在编译和运行时工作。

Method是一个包含一系列语句的代码块。显式调用方法。 方法适用于运行时。

我对这个派对来说有点迟了,但我只想提一下属性和无参数“get”方法之间的另一个令人惊讶的区别。 正如@MarcGravell所说,延迟加载是使用属性时的常见模式,但要注意海森堡观察窗口的问题!

我认为这与您编程的文化有很大关系。正如我所看到的,C#/ .NET文化更喜欢在这种情况下使用属性

我的建议:尽量与您正在使用的主库保持一致。

但是:要小心使用属性(或用于相同目的的函数,如上例所示),因为它们通常是糟糕设计的标志。 你想告诉你的对象做些什么,而不是他们索取信息。 但是,不要对此有所了解,只要注意这是一种代码味道。