単純な裸の違いがわかりません
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)
.
非常に便利なケースの 1 つは、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 が渡されているため、コンテキストベースです。私はあなたの文脈が何であるかを知らなければなりません。