c#Initializers vs constructors

时间:2018-03-22 09:13:39

标签: c#

我目前正在处理一些旧代码,我开始怀疑,实际上是否有任何区别:

ContentControl.Unloaded

public class XmlExport : IXmlExport
{
    private readonly IJobRepository jobRepository = new JobRepository();
}

在构造函数内初始化有什么好处吗?还是只是相同的代码?

2 个答案:

答案 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,您知道不会抛出的类型)声明
  • 可能引入构造函数的对象。