我何时以及为什么要使用ClassName:this(null)?

时间:2013-02-13 18:50:23

标签: c# parameters constructor

我无法理解简单裸露

之间的区别
Public ClassName() {}

Public ClassName() : this(null) {}

我知道只有当我有+1重载的ctor时我才能使用它,但我无法理解defining the parameterless constructor这样的优势。

3 个答案:

答案 0 :(得分:10)

这允许单参数构造函数具有所有逻辑,因此不会重复。

public ClassName() : this(null) {}

public ClassName(string s)
{
    // logic (code)
    if (s != null) {
        // more logic
    }
    // Even more logic
}

我希望很明显,如果不是this(null),那么在无参数构造函数中需要重复“逻辑”和“更多逻辑”。

答案 1 :(得分:3)

一个非常有用的案例是像WinForms这样的情况,设计师需要一个无参数的构造函数,但是你希望你的表单需要一个构造函数。

public partial SomeForm : Form
{
    private SomeForm() : this(null)
    {
    }

    public SomeForm(SomeClass initData)
    {
        InitializeComponent();

        //Do some work here that does not rely on initData.           

        if(initData != null)
        {
           //do somtehing with initData, this section would be skipped over by the winforms designer.
        } 
    }
}

答案 2 :(得分:1)

有一种名为Constructor injection的模式。此模式主要用于单元测试和共享逻辑。这是一个例子

public class SomeClass 
{
   private ISomeInterface _someInterface;
   public SomeClass() : this (null){} //here mostly we pass concrete implementation 
   //of the interface like this( new SomeImplementation())

   public SomeClass(ISomeInterface someInterface)
   {
      _someInterface = someInterface;       
      //Do other logics here
   }
}

如您所见,通过传递虚假实现,单元测试将很容易。此外,逻辑是共享的(DRY)。并且在构造函数中执行所有逻辑,这些逻辑采用最多的参数

但是在你的情况下,null正在传递,所以这是基于上下文的。我必须知道你的背景是什么。