加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#在对象中加载初始数据的位置?

发布时间:2020-12-15 18:20:56 所属栏目:百科 来源:网络整理
导读:与此问题类似: C# Constructor Design但这个问题略有不同. 我有一个Customer类和一个CustomerManager类.当创建CustomerManager类的实例时,我想加载所有客户.这就是我陷入困境的地方.我可以通过以下几种方式做到: 在构造函数中加载所有客户(我不喜欢这个,因
与此问题类似:
C# Constructor Design但这个问题略有不同.

我有一个Customer类和一个CustomerManager类.当创建CustomerManager类的实例时,我想加载所有客户.这就是我陷入困境的地方.我可以通过以下几种方式做到:

>在构造函数中加载所有客户(我不喜欢这个,因为如果我有很多客户可能需要一段时间)
>在执行数据库相关操作的CustomerManager类的每个方法中,检查是否加载了本地客户列表,如果没有,请加载列表:

public method FindCustomer(int id)
{
  if(_customers == null)
  // some code which will load the customers list
}

>创建一个加载所有客户的方法.必须在调用执行数据库相关操作的方法之前调用此方法:

在课堂里:

public LoadData()
{
   // some code which will load the customers list
}

形式如下:

CustomerManager manager = new CustomerManager();
manager.LoadData(); 
Customer customer = manager.FindCustomer(int id);

做这个的最好方式是什么?

编辑:

我觉得我在这里被误解了.也许是因为我不够清楚.在CustomerManager类中,我有几种方法取决于本地列表(_customers).所以,我的问题是,我应该在哪里填写该清单?

解决方法

你所描述的是“延迟加载”.

一个简单的方法是拥有这样的私有财产:

private Lixt<Customer> _customers;
private List<Customer> Customers
{
  get
  {
    if(_customers == null)
      _customers = LoadData();
    return _customers;
  }
}

然后,您在内部引用客户.客户将在第一次需要时加载,但不会更早.

这是一种常见的模式,即.Net 4.0增加了一个懒惰的< T>.为你做这个的课程.

在这种情况下,您只需将其定义为私有,如下所示:

private Lazy<List<Customer>> _customers = new Lazy<List<Customer>>(LoadData);

然后,您只需在代码中引用您的客户:

_customers.Value

该类将使用您的LoadData()方法初始化该值.

如果你还没有使用.Net 4.0,那么Lazy< T> class很容易实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读