属性与方法的区别
例如,当它返回值时哪一个更好用
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文化更喜欢在这种情况下使用属性 。
我的建议:尽量与您正在使用的主库保持一致。
但是:要小心使用属性(或用于相同目的的函数,如上例所示),因为它们通常是糟糕设计的标志。 你想告诉你的对象做些什么,而不是向他们索取信息。 但是,不要对此有所了解,只要注意这是一种代码味道。