public abstract class BllBase
{
public IRepository Repo;
protected BllBase()
{
Repo = new Repository();
}
}
通过构造函数实现例化 Repo
为什么不直接写成 这个样子?
public abstract class BllBase
{
public IRepository Repo = new Repository();
}
1.写的人从c++转过来的,c++只支持前一种写法。
2.写在构造函数里含义更加明确。
3.喜欢
很有可能这样写的人写错了,少了一个IRepository 类型的参数,应该是依赖注入吧!
也许楼上的写代码的小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 字段数据可不是一个良好的编程习惯哦。
我感觉应该写成如下:
public abstract class BllBase
{
protected IRepository _repository;
public BllBase(IRepository repository)
{
this._repository = repository
}
}
其实这2个还是有区别的,但是最后的要达到的结果却是一样
一个是定义了变量,然后在构造函数中初始化,
一个是定义了就直接初始化,
其实这样的操作中,也就是做构造函数之前还是会先做public IRepository Repo = new Repository();