これは非常に簡単な質問だということはわかっていますが、私はここしばらくこの概念について苦労してきました。
私の質問は、C# でコンストラクターを連鎖させるにはどうすればよいかということです。
私は初めての OOP クラスを受講しているので、まだ学習中です。コンストラクタ チェーンの仕組みや実装方法、さらには、チェーンなしでコンストラクタを実行するよりも優れている理由も理解していません。
説明付きの例をいくつか教えていただければ幸いです。
では、どのように連鎖させるのでしょうか?
2 つの場合は次のようになります。
public SomeClass this: {0}
public SomeClass
{
someVariable = 0
}
しかし、3 つ、4 つなどの場合はどうすればよいでしょうか?
繰り返しになりますが、これは初心者の質問だとはわかっていますが、理解に苦労しており、その理由もわかりません。
ベストアンサー1
クラス内でオーバーロードを選択するには、標準構文 (this
メソッドのように使用)を使用します。
class Foo
{
private int id;
private string name;
public Foo() : this(0, "")
{
}
public Foo(int id, string name)
{
this.id = id;
this.name = name;
}
public Foo(int id) : this(id, "")
{
}
public Foo(string name) : this(0, name)
{
}
}
それから:
Foo a = new Foo(), b = new Foo(456,"def"), c = new Foo(123), d = new Foo("abc");
また、次の点にも注意してください:
- ベースタイプのコンストラクタに連鎖するには、
base(...)
- 各コンストラクタに追加のコードを入れることができる
- デフォルト(何も指定しない場合)は
base()
「なぜ?」について:
- コードの削減(常に良いこと)
デフォルト以外の基本コンストラクタを呼び出す必要がある場合、たとえば次のようになります。
SomeBaseType(int id) : base(id) {...}
ただし、同様の方法でオブジェクト初期化子を使用することもできます (何も記述する必要はありません)。
SomeType x = new SomeType(), y = new SomeType { Key = "abc" },
z = new SomeType { DoB = DateTime.Today };