属性与方法的区别

时间:2010-03-30 11:26:48

标签: c# properties methods

当它返回值时,最好使用哪一个

public int EmployeeAge
{
    get{return intEmployeeAge};
}

并且

public int EmployeeAge()
{
    return intEmployeeAge;
}

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

8 个答案:

答案 0 :(得分:30)

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

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

方法(C#没有函数)更适合表达更改状态,或者期望花费一些时间而不一定是可重现的事物。它们不倾向于在绑定/序列化等方面工作。

请注意,属性实际上只是编写方法的一种特殊方式。 功能差异很小。这完全是关于表达意图。但是,要公开的一件事是 fields (实际的intEmployeeAge实例变量)。

所以我会:

public int EmployeeAge { get{return intEmployeeAge}; }

或仅(如果在Employee对象上):

public int Age { get{return intEmployeeAge}; }

当然......然后问题变成“在什么单位?”我认为那是几年?

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

属性保存对象数据

函数定义对象行为

看看 - > Property Usage Guidelines

答案 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文化在这种情况下更喜欢使用属性

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

警惕使用属性(或用于相同目的的函数,如上例所示),因为它们通常是设计不良的标志。您希望告诉您的对象执行操作,而不是询问他们的信息。但是,请不要嫉妒这一点,只要注意这是一种代码味道。