我目前正在处理一些旧代码,我开始怀疑,实际上是否有任何区别:
ContentControl.Unloaded
和
public class XmlExport : IXmlExport
{
private readonly IJobRepository jobRepository = new JobRepository();
}
在构造函数内初始化有什么好处吗?还是只是相同的代码?
答案 0 :(得分:2)
在构造函数级别使用的一个优点是,您可以从外部传递依赖项并轻松更改代码。
你可以这样做
public class XmlExport : IXmlExport
{
private readonly IJobRepository _jobRepository;
public XmlExport(IJobRepository jobRepository)
{
_jobRepository = jobRepository;
}
}
这称为Dependency injection
,称为Constructor Level Dependancy
注射。
我不喜欢在课堂上声明和初始化字段,而且我没有看到这样做的好处。如果你想进行初始化而不是构造函数在类中仅用于此目的,这是根据我阅读的C ++书籍。
答案 1 :(得分:2)
问题已经有了答案javadoc,我只想添加我的2p。
如果在你的例子中
data.map(function(d) { return { letter: d.src } })
public class XmlExport : IXmlExport
{
private readonly IJobRepository jobRepository = new JobRepository();
}
构造函数抛出异常,您将获得
应用程序处于中断模式。
但是,如果JobRepository
在构造函数中初始化,就像这样
jobRepository
您将获得确切的异常,堆栈跟踪等。这也是您实际捕获异常的唯一位置。
因此,在我看来,最好初始化
public class XmlExport : IXmlExport
{
private readonly IJobRepository jobRepository;
public XmlExport()
{
jobRepository = new JobRepository();
}
}
,int
,您知道不会抛出的类型)声明