当前位置:  开发笔记 > 编程语言 > 正文

推荐Property的编程模式

如何解决《推荐Property的编程模式》经验,为你挑选了1个好方法。

我很擅长使用C#.但是我对某个部分感到困惑,这促使我提出这个问题.

我有一个代码 -

public class UsersModel
{
public List Users
{
   get
   {
    // Some code to connect to database and get list of users from database
    // return list of users
   }

}
}

public class HomeController
{
   var um = new UsersModel();
   var users = um.Users;
}

现在当我从ANTS Performance Profiler检查这样的代码时,我发现该属性被击中2次,我相信它会影响性能.

问题 -

    我应该在构造函数中初始化属性值吗?

    或者我应该为此类任务创建单独的方法?

    为什么属性用户被击中2次?

编辑-

作为参考,我将添加链接属性设计,分享好的想法.

我喜欢语句Property getters应该是没有任何先决条件的简单操作.如果getter可能抛出异常,请考虑将该属性重新设计为方法.



1> Rotem..:

从MSDN "在属性和方法之间选择"(强调我的):

在以下情况下,请使用方法而不是属性.

该操作比字段集慢几个数量级.如果您甚至考虑提供异步版本的操作以避免阻塞线程,则很可能该操作太昂贵而无法成为属性.特别是,访问网络或文件系统的操作(初始化除了一次)应该最有可能是方法,而不是属性.

在这种情况下,您应该选择一个方法,因为您的类的调用者希望属性快速返回.

否则,粗心的调用者可能会随意编写代码,例如:

for (int i = 0; i < um.Users.Count; i++)
{
    Console.WriteLine("User {0}: {1}", i, um.Users[i].Name);
}

导致N+1对数据库的调用,其中N是用户数.

通过使其成为一种方法,您正在将缓存结果的责任转移给调用者.


为什么属性用户被击中2次?

我怀疑它实际上可能是调试器或分析器检查属性值的结果.在另一个答案中提到的唯一知道方法是检查调用堆栈.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有