c# - 用户定义的属性是延迟加载还是急切加载

标签 c# properties lazy-loading

在 C# 中,当您拥有属性时:

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

  }
}

当你从数据库中获取一个人时:

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

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

mike.AnIntegerValue

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

最佳答案

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

解释:

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

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

  }

相当于:

Public int get_AnIntegerValue()
  {

      //Some logic
      return somevalue;  

  }

事实上,这正是您的属性被编译成的目标(如果您在调试时跟踪堆栈,您可以看到这一点)。

因此,与不立即评估功能的方式一样,属性也是如此,您可以使用它们而不必担心额外的性价比问题。

可以看看this有关何时使用属性以及何时使用函数是更好、更优雅的方法的一些指南。

关于c# - 用户定义的属性是延迟加载还是急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17518967/

相关文章:

c# - VB.NET 中代码注释和 XML 注释的不同颜色

c# - 如何升级 Entity Framework 5 Code First 的 DataAnnotations

javascript - 对象属性的赋值顺序与它们声明的顺序相同吗?

gwt - 如何从GWT主机页面读取属性?

c# - 5 年后 - MEF 中是否有惰性 dll 加载?

c# - 虽然更新并发字典中的值最好锁定字典或值

c# - 如何分离 double 和字符串项,出现无效的转换错误

objective-c - 我什么时候应该明确使用@synthesize?

Angular 6/7 辅助导出按路线导航 - 清除主导出,但不应该

javascript - 在 React 中延迟加载嵌入的 YouTube 视频