首页新闻找找看学习计划

这样子写是为什么?

0
[待解决问题]

    public abstract class BllBase
    {
        public IRepository Repo;

        protected BllBase()
        {
            Repo = new Repository();
        }

  }

通过构造函数实现例化 Repo

为什么不直接写成 这个样子?

    public abstract class BllBase
    {
        public IRepository Repo = new Repository();

  }

wunaigong的主页 wunaigong | 初学一级 | 园豆:4
提问于:2011-11-26 09:46
< >
分享
所有回答(5)
0

1.写的人从c++转过来的,c++只支持前一种写法。
2.写在构造函数里含义更加明确。
3.喜欢

Greatest | 园豆:678 (小虾三级) | 2011-11-26 10:55
0

很有可能这样写的人写错了,少了一个IRepository 类型的参数,应该是依赖注入吧!

小小刀 | 园豆:1991 (小虾三级) | 2011-11-26 12:09
0

也许楼上的写代码的小2B博友更有道理些,但是这种延迟不够给力。

软件设计中的一个条原则:尽可能延迟变量定义式的出现时间——Effective C++,同样适用于C#

这条原则告诉我们,也许我们已经定义的变量根本没机会用上(由于异常,跳转等原因),由此会造成性能的损失。

而且这里BllBase还是一个抽象类,又可能会有很多子类,很多运行时定义,也就是说每定义BllBase子类对象都需要立马new Repository对象,当这样的定义数量足够大和定义时机集中时,这会是一个潜在的引起性能瓶颈源。

这里提供一种替代方案,当然方案选择需要根据具体需求做决策,仅供交流。

    public abstract class BllBase
{
private IRepository _Repo;

public IRepository Repository
{
get { return _Repo; }
set { _Repo = value; }
}
protected BllBase()
{
}
}

另外提一下,直接public 字段数据可不是一个良好的编程习惯哦。

胡屯 | 园豆:714 (小虾三级) | 2011-11-26 17:00
0

我感觉应该写成如下:

public abstract class BllBase
{
protected IRepository _repository;

public BllBase(IRepository repository)
{
this._repository = repository
}
}
鹤冲天 | 园豆:2379 (老鸟四级) | 2011-11-26 17:35
0

其实这2个还是有区别的,但是最后的要达到的结果却是一样

一个是定义了变量,然后在构造函数中初始化,

一个是定义了就直接初始化,

其实这样的操作中,也就是做构造函数之前还是会先做public IRepository Repo = new Repository();

chenping2008 | 园豆:9836 (大侠五级) | 2011-11-28 16:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册