在阅读了关于何时使用属性和方法的microsoft article之后,我有点困惑。c#在属性和方法之间进行选择
在底部的例子,他们说:
下面的代码示例显示了假设 一个属性访问在计算上是廉价的完整的应用程序。 EmployeeData类错误地定义了一个返回数组副本 的属性。
具体
的EmployeeData工作类错误地定义返回一个阵列的 拷贝的属性。
什么是正确的做法呢?
在阅读了关于何时使用属性和方法的microsoft article之后,我有点困惑。c#在属性和方法之间进行选择
在底部的例子,他们说:
下面的代码示例显示了假设 一个属性访问在计算上是廉价的完整的应用程序。 EmployeeData类错误地定义了一个返回数组副本 的属性。
具体
的EmployeeData工作类错误地定义返回一个阵列的 拷贝的属性。
什么是正确的做法呢?
这只是一个指导方针,但你的属性应该尽可能地轻便。复制一个数组,就像在这个例子中一样,对于一个属性来说非常广泛。它应该是一种方法。这样,使用此代码的任何人都知道可能需要一些时间。属性通常反映私人领域的访问者,所以人们期望它几乎立即返回。希望这是有道理的。
它只是点击,正确的方法将删除Employees get属性,并始终调用CopyEmployeeRecords(),以便其他开发人员知道这是一个“昂贵”的函数来调用? –
@SvenB正确!它不会改变任何东西,除非告诉某人这可能是计算密集型的(不仅仅是返回一个字段) –
该属性是“不正确的”,因为它里面的代码很慢。
public EmployeeRecord[] Employees
{
get
{
return CopyEmployeeRecords(); // slow code in property - bad
}
}
相反,写一个方法:
public EmployeeRecord[] Employees()
{
return CopyEmployeeRecords(); // slow code in method - ok
}
的部分
使用方法,而不是一个属性,在下面的情况。
在您正在阅读的文章中告诉您使用一种方法而不是该属性的属性返回一个数组。
所以正确的方法是创建一个方法来复制数组。
在不阅读文章的情况下冒险猜测:副本可能很昂贵,并且值得一种方法(意味着需要完成一些工作)而不是属性(仅意味着数据访问)。该属性应该返回对数组的引用(如果这甚至是合适的),而不是它的副本。 – Conduit
用“所以它应该使用一种方法”来展开该文本。 –