1

以下のコードには疑問がありますが、

public class ClassA: BaseClass
{
    public ClassA(UIElement element)
        : base(element)
    {
    }
}

public class ClassA: BaseClass
{
    public ClassA(UIElement element)
    {
    }
}

上記のコードの違いは何ですか?

疑問:

1.ベースコンストラクタを呼び出す必要があります

2.基本コンストラクターを呼び出す用途は何ですか

3.基本コンストラクターを呼び出さなかった場合、暗黙的に呼び出します。

誰でもこれについて提案してください。

4

6 に答える 6

1

いずれの場合も、暗黙的に基本コンストラクターが呼び出され、後者の場合はデフォルトが使用されます。最初の場合は、引数を受け入れる明示的な基本コンストラクターが使用されます。基本クラスにデフォルトのパラメーターなしのコンストラクターが存在しない場合、必要な入力を提供するためにユーザーが明示的に呼び出していないと、エラーが発生します。

そのため、特定のコンストラクターに入力を渡す必要がある場合、または既定のパブリック コンストラクターが定義されていない場合にのみ呼び出す必要があります。

于 2013-05-30T10:46:29.390 に答える
0

1-3. いいえ、基本カルスにパラメーターなしのコンストラクターが含まれている場合、自動的に呼び出す必要はありません 2.別のクラスから継承するときにベースを使用すると、継承した部分も構築する必要があるため、基本コンストラクターを呼び出す必要があります

于 2013-05-30T10:48:34.053 に答える
0

最初のものは基本コンストラクターにパラメーターを渡しますが、2 つ目はデフォルト (パラメーターなしのコンストラクター) を使用します。

public class Human
{
    public string Name { get; set; }
    public Human()
    {
        Name = "No name";
    }
    public Human(string name)
    {
        Name = name + " Jr.";
    }
}
public class Male : Human
{
    public Male() {}
    public Male(string name) : base(name) {}
}
public class Female : Human
{
    public Female() { Name = "Girl"; }
}


var unnamedHuman = new Human();
//unnamedHuman.Name == "No name"
var namedHuman = new Human("Jon");
//namedHuman.Name == "Jon"

var unnamedMale = new Male();
// unnamedMale.Name == "No name"
var namedMale = new Male("Chris");
// namedMale.Name == "Chris Jr";

var unnamedFemale = new Female()
// unnamedFemale.Name == "Girl"

ロジック: 子クラスを (ctor を呼び出して) 初期化すると、最初にその基本クラスのコンストラクターが順番に呼び出され (トップダウン)、最後のコンストラクターは、呼び出した子クラスのコンストラクターになります。既定では、既定のパラメーターなしのコンストラクターが使用されますが、 を使用して、引数を指定して基本コンストラクターに渡すことができますbase(parameter1, p2)

于 2013-05-30T11:02:19.913 に答える
0

を使用してさらに2つのことに注意してくださいchained contructors

  1. 基本コンストラクターは、常に実際のコンストラクターの前に呼び出されます。
  2. コンストラクターには、プライベートやパブリックなどのさまざまなアクセシビリティを設定できます。すべてのコンストラクターをベースから派生クラスにチェーンすることはできません。
于 2013-05-30T10:52:14.307 に答える