1. ホーム
  2. c#

[解決済み】C#でコンストラクタのチェーニングを行う方法

2022-04-15 18:53:02

質問

超簡単な質問のはずなのですが、このところ、このコンセプトに悩まされています。

私の質問は、C#でコンストラクタをどのように連鎖させるかです。

私は初めてのOOPの授業を受けているので、ちょうど勉強中です。コンストラクタの連結がどのように機能するのか、どのように実装するのか、また、なぜ連結せずにコンストラクタだけを行うよりも良いのかさえも理解していません。

説明付きの例題をお願いします。

では、どのように連鎖させるのでしょうか?

2つならわかるんだけどね。

public SomeClass this: {0}

public SomeClass
{
    someVariable = 0
} 

しかし、3つ、4つと続くとなるとどうでしょう?

またまた、初心者の質問なのですが、これがなかなか理解できなくて、どうしてなのでしょうか?

どのように解決するのですか?

標準的な構文を使用します。 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()

for "なぜ?

  • コード削減 (常に良いことです)
  • 必要 を使用して、例えばデフォルトでないベースコンストラクタを呼び出すことができます。

    SomeBaseType(int id) : base(id) {...}
    
    

なお、オブジェクト・イニシャライザーも同様の方法で(何も書かなくても)使用することができます。

SomeType x = new SomeType(), y = new SomeType { Key = "abc" },
         z = new SomeType { DoB = DateTime.Today };