C#在对象中加载初始数据的位置?
与此问题类似:
C# Constructor Design但这个问题略有不同. 我有一个Customer类和一个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很容易实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQLite3数据类型
- Kali启动armitage
- logback logback.xml常用配置详解(三) <filter>
- c# – Ninject – 绑定带约束的泛型类型
- Validate Matches in Procedural Code (用程序码验证匹配)
- ruby-on-rails – 在活动管理中更改默认日期格式化程序
- postgresql 查看系统表的信息
- 字符串反转,但单词不倒置
- ORA-38706: Cannot turn on FLASHBACK DATABASE logging.OR
- React-Native 错误问题-1 :Watcher took too long to load