我无法理解简单裸露之间的区别
Public ClassName() {}
和
Public ClassName() : this(null) {}
我知道只有当我有一个+1
重载的ctor时我才能使用它,但我无法理解defining the parameterless constructor
这种方式的优点。
我无法理解简单裸露之间的区别
Public ClassName() {}
和
Public ClassName() : this(null) {}
我知道只有当我有一个+1
重载的ctor时我才能使用它,但我无法理解defining the parameterless constructor
这种方式的优点。
这允许单参数构造函数具有所有逻辑,因此不再重复。
public ClassName() : this(null) {}
public ClassName(string s)
{
// logic (code)
if (s != null) {
// more logic
}
// Even more logic
}
我希望很清楚,如果不是this(null)
.
一个非常有用的情况是像 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.
}
}
}
有一种称为构造函数注入的模式。这种模式主要用于单元测试和共享逻辑。这是一个例子
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 正在传递,因此这是基于上下文的。我必须知道你的上下文是什么。