3

基本コンストラクターの実装を理解しようとしています。この状況を考えてみましょう 私が基本クラス Sport を持っている場合

public class Sport 
{
   public int Id { get; set; }
   public string Name { get; set; }

   public Sport() 
   {
      Console.WriteLine("Sport object is just created");
   }

   public Sport(int id, string name) 
   {           
      Console.WriteLine("Sport object with two params created");
   }
}

これで、Sport クラスを継承するバスケットボール クラスができました。バスケットボール オブジェクトの初期化で、2 つのパラメータを持つ 2 番目のコンストラクタを使用したいと考えています。

public class Basketball : Sport
{    
    public Basketball : base ( ???? )
    {
       ?????
    }
}

最初に、プライベート フィールド int _Id と string _Name を使用し、それらをコンストラクター呼び出しで使用することを考えていました

public Basketball : base ( int _Id, string _Name )
{
   Id = _Id;
   Name = _Name;
}

しかし、それでは継承を使用する意味がありません。この例で説明してください。

更新しまし た皆さん、ありがとうございます。私はこのようなコードを使用していますが、問題ありません。

public Basketball(int id, string name) : base (id, name)
{
   Id = id;
   Name = name;
}

念のため、この行 public Basketball(int id, string name) : base (id, name)では変数 id、name を宣言しています。これは、元の変数が大文字の変数であるためであり、base (id, name) のパラメーターとして使用して、base コンストラクターをヒットします。

みんなありがとう。とても助かりました/

4

5 に答える 5

4

あなたが求めているコンストラクタは次のとおりです。

public Basketball(int id, string name) : base(id,name) {}
于 2012-10-22T16:00:30.470 に答える
3

基本クラスのコンストラクターに が含まれていない場合は、valuesまたはvariablesをに渡す必要があります。derives classbase class constructordefault parameterless constructor

基本コンストラクター呼び出しで何も宣言する必要はありません

base キーワードの主な目的は、base class constructor.

一般に、独自のコンストラクターを宣言しない場合、コンパイラーは自動的に を作成default constructorします。

ただし、独自のコンストラクターを定義するとparameter、コンパイラーはdefault parameterless constructor.

したがって、基本クラスで宣言されたデフォルトのコンストラクターがなく、パラメーターを持つ基本クラスのコンストラクターを呼び出したい場合は、その基本クラスのコンストラクターを呼び出し、baseキーワードを介して必要な値を渡す必要があります。

このようにしてください

public Basketball() : base (1,"user")

また

public Basketball(int id,string n) : base (id,n)

また

public Basketball(int id,string n) : base ()

また

public Basketball() : base ()

と類似しています

public Basketball()//calls base class parameterless constructor by default

それはすべて、クラスがインスタンス化されたときにクラスをどのように動作させたいかによって異なりますderived

于 2012-10-22T16:02:27.077 に答える
2

コンストラクターは継承されません。そのため、基本コンストラクターを呼び出して再利用する必要があります。基本コンストラクターが使用する以外のことをしたくない場合:

public Basketball( int id, string name ) : base ( id, name )
{

}

idただし、基本コンストラクターでandnameパラメーターを使用していないため、この例は少し誤解を招きます。より正確な例は次のとおりです。

public Sport(int id, string name) 
{           
    Console.WriteLine("Sport object with two params created");

    Id = id;
    Name = name;
}
于 2012-10-22T16:01:31.283 に答える
1

Basketball のコンストラクターで同じパラメーターを取得する必要があります。

public Basketball(int id, string name) : base(id, name)

または、何らかの方法でコンストラクターで値を取得し、プロパティを介して設定します。

public Basketball()
{
    int id = ...;
    string name = ...;

    base.Id = id;
    base.Name = name;
}
于 2012-10-22T16:03:40.067 に答える
0

このキーワードbaseを使用すると、基本コンストラクターに渡すパラメーターを指定できます。例えば:

public Basketball(int _Id, string _Name) : base (_Id, _Name )
{
}

2 つのパラメーターを使用して基本コンストラクターを呼び出します。

public Basketball(int _Id, string _Name) : base ()
{
}

パラメーターなしで基本コンストラクターを呼び出します。どちらに電話をかけたいかによって異なります。

于 2012-10-22T16:02:49.087 に答える