想象一下这堂课
Class Person
{
public string Name { get; set; }
public int SomeExpensiveCalculation {
get {
return TimeConsumingCalulation(Name )
}
}
}
由于get是一种方法,因此我假设,从不请求或不使用属性“ SomeExpensiveCalculation”时,就不会执行函数“ TimeConsumingCalulation”。这是正确的吗?
答案 0 :(得分:2)
是的。属性获取器只是一种在调用时执行的方法。
但是属性应该简单,避免在属性内部进行昂贵的计算。
答案 1 :(得分:0)
是正确的。属性只是GetValue和SetValue函数对的语法糖。我认为他们还增加了一些反思支持。
对于可能不需要的值使用“耗时操作”,也许Lazy[T]是一个很好的工具?至少可以更清楚地知道懒惰初始化是您的意图。在它和WeakRefrence [T]之间,通常可以用内存分配或时间消耗来覆盖边缘情况。
但是,在运行时实际执行哪段代码有些棘手。 .NET具有称为“及时”编译器的功能,它可能会或可能不会进行各种优化。它可以添加一个临时变量,以避免两次检索相同的集合值。或削减未使用的临时变量。在数组访问器中切出大部分边界检查。
Inling属性在那里,但是通常不会影响它的任何工作。