1

いくつかの継承に少し問題があります。

私の基本クラスには、次のコンストラクターがあります。

    public Camera(string n)
    {
         name = n;
    }

次に、子クラスに次のコンストラクターがあります。

   public StereoCameras(string n) 
    {
        name = n;

    }

ただし、私の子クラスは、引数を 0 取るコンストラクターが含まれていないと不平を言っています。私はこのような継承を使用するのはかなり初めてで、子コンストラクターを適切にセットアップしたと思いました。

足りないものはありますか?

4

5 に答える 5

7

基本コンストラクターを呼び出す必要があります。

public StereoCameras(string n) : base(n)
{
}

その場合、派生クラスでの割り当ては冗長です。

于 2013-05-15T11:15:09.970 に答える
3

子クラスのコンストラクター呼び出しは次と同等です。

public StereoCameras(string n) : base()

基本クラスでパラメーターのないコンストラクターを定義していないため、エラーが発生します。基本クラスのパラメーターのないコンストラクターが暗黙的に呼び出されます( キーワードを使用して呼び出されるコンストラクターがない場合)base

参照:コンストラクターの使用 (C# プログラミング ガイド) - MSDN

派生クラスでは、基底クラスのコンストラクターがbase キーワードを使用して明示的に呼び出されない場合、既定のコンストラクターがあれば、それが暗黙的に呼び出されます。

この問題を解決するには、基本クラスでパラメーターのないコンストラクターを宣言するか、次のように定義済みのコンストラクターを明示的に呼び出します。

public StereoCameras(string n) : base(n)

こちらも同じリンクから

基本クラスが既定のコンストラクターを提供しない場合、派生クラスはbase を使用して基本コンストラクターを明示的に呼び出す必要があります。

于 2013-05-15T11:17:22.010 に答える
1

使用する

  public StereoCameras(string n) : base(n)
    {


    }
于 2013-05-15T11:15:22.753 に答える
0

基本クラスにパラメーターなしでコンストラクターを追加するだけです。これで問題が解決します。

    public Camera()
    {

    }
于 2013-05-15T11:28:29.697 に答える
0

クラスがインスタンス化されると、基本クラスのコンストラクターは常に、派生クラスのコンストラクターの前に呼び出されます。基本クラスに既定のコンストラクターが含まれていない場合は、基本クラスのコンストラクターを呼び出す方法を明示的に定義する必要があります。

あなたの場合、これは(base呼び出しに注意してください)

public StereoCameras(string n) 
   : base(n)
{
}
于 2013-05-15T11:20:31.270 に答える