1

在 C# 中,当你有一个属性时:

public class Person
{
  public int AnIntegerValue
  {
    get
    {
      //Some logic
      return somevalue;
    }

  }
}

当您从数据库中获取 Person 时:

 var mike = Uow.GetPerson("Mike");

是立即评估 AnIntegerValue 还是代码等待:

mike.AnIntegerValue

我想知道,因为如果您将大量逻辑放入属性中并且它被急切加载,这显然会影响性能。

4

3 回答 3

3

不会立即评估属性。它们在访问“get”修饰符时进行评估。

解释:

归根结底,函数和属性之间没有真正的区别。
意义:

public int AnIntegerValue
  {
    get
    {
      //Some logic
      return somevalue;
    }

  }

相当于:

Public int get_AnIntegerValue()
  {

      //Some logic
      return somevalue;  

  }

事实上,这正是你的属性被编译成的(如果你在调试时遵循堆栈,你可以看到)。

因此,与不会立即评估函数的方式相同,属性也是如此,您可以使用它们而不必担心额外的成本性能。

您可以查看线程,了解有关何时使用属性以及何时使用函数是更好、更优雅的方式的一些指南。

于 2013-07-08T04:35:30.803 回答
1

这取决于GetPerson(). 默认情况下,当实例化一个类时,它的属性不会被评估(getter 不会运行)。属性的支持变量将被初始化为其类型的默认值。

于 2013-07-08T04:02:10.773 回答
0

您应该加载整个对象(或聚合,因为它在域驱动设计中被称为)。延迟加载是一种用于相关对象的技术。我的观点是不应该使用延迟加载,因为它是查询对象图的一种症状。

可以进入很多细节,所以我会坚持简短的回答:不要延迟属性/列并尝试从不延迟加载:)

于 2013-07-08T04:06:03.650 回答