c# - 在 Getter 或构造函数中初始化成员

标签 c# asp.net constructor getter

这两种方法有区别吗?

在这种方法中,我使用 getter 来初始化 DataTable

public DataTable Res
{
    get
    {
        if (Res == null)
        {
            Res = GetDataTable();
        }
        return Res ;
    }
    private set;
}

对比

在这种方法中,我使用构造函数来初始化 DataTable

public class XYZ
{
    public DataTable Res{ get; private set;}
    //constructor 
    public XYZ()
    {
        Res= GetDataTable();            
    }
}

此变量在 ASP.net 页面上用于填充下拉列表。哪个会表现更好?

编辑:-

这用于数据不会更改的 Web 应用程序。我将此表绑定(bind)到 Page_Load 事件中的下拉列表。

最佳答案

问题是 XYZ 类的给定实例是否始终需要并使用 DataTable

如果没有,那么您需要延迟初始化(使用 getter),以避免毫无意义地预先完成工作。

如果您始终需要它,那么下一个问题是在类的实例化和对 Res 属性的调用之间是否存在潜在的任何实质性延迟。如果是这样,那么在实例化时加载数据可能意味着您的数据比等到调用属性 getter 时的数据更陈旧。

相反的一面不一定适用于 Web 场景,但在其他应用程序中,我们需要考虑对属性的调用是否需要高度响应以防止 UI 卡住。在这种情况下,预加载数据可能更好。

关于c# - 在 Getter 或构造函数中初始化成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611753/

相关文章:

c# - 如何在 C# 中定义 TBBUTTON 结构?

c# - 使用 Compile Assembly From Source 计算 C# 中的数学方程

c# - 如何从下拉列表中获取 DataValueField?

c# - ASP.NET 身份 cookie 能否向后兼容表单例份验证?

java - 重载构造函数根据输入类型调用其他构造函数

c# - SignalR 将消息发送到单个 connectionId

asp.net - 如何在 Visual Studio 2012 中检查我的项目是网站还是 Web 应用程序?

java - 在java中重写构造函数

c++ - 将 vector 初始化为整数列表

c# - 为什么 Process.WaitForExit 不等待?