【发布时间】:2019-12-02 18:17:16
【问题描述】:
想象这个类
Class Person
{
public string Name { get; set; }
public int SomeExpensiveCalculation {
get {
return TimeConsumingCalulation(Name )
}
}
}
由于 get 是一种方法,我假设,当从未请求或使用属性“SomeExpensiveCalculation”时,永远不会执行函数“TimeConsumingCalulation”。这是正确的吗?
【问题讨论】:
-
“正确吗?” 是的。但我想说这是不好的做法,属性不应该是长时间运行的计算(甚至可能引发异常)。比从未调用它更糟糕的是,
TimeConsumingCalculation()将在您访问该属性时每次被调用.. -
直接调用该方法,而不是将其隐藏在属性中。该属性所做的只是使您不必在调用结束时加上括号。
-
看看this。
get是一种方法。一个方法在你调用它之前不会被执行。然而,正如 Rene 所说,使用属性与方法会向调用者传达他们只是在检索一个值,而不是调用一些长时间运行的方法。如果它是一个属性,那么某人可能会一次又一次地引用它,而没有意识到他们正在调用一个长时间运行的方法。如果它是一种方法,他们会将结果存储在一个变量中。另一种判断方式 - 设置断点。 -
当您在该对象上调试和添加手表时会很有趣
-
看看 Lazy
泛型类。它允许您只评估一次昂贵的函数,并且仅在请求该值时。
标签: c# object properties instantiation