2012-03-16 6 views

答えて

0

、あなたがそうのようなあなたの基本コンストラクタを呼び出す必要があります:

base(param1,param2,...) 

を明示的にベースのコンストラクタを呼び出していない場合は、ベースクラスのデフォルトコンストラクタがあれば、呼び出されます1つ存在する。そうでない場合は、コンパイルエラーが発生します。

2

保護されたあなたのコンストラクタを実行すると、抽象基底クラスは、デフォルトコンストラクタ(パラメータなしですなわちコンストラクタを)持っている場合、それは自動的にいない限り、派生クラスのコンストラクタによって呼び出されます

public abstract class A 
{ 
protected A(string v) { V = v; } 
public string V { get; protected set; } 
} 

public class AA : A 
{ 
public AA(string v) : base (v) {} 
} 
+2

私はOPが同じシグネチャでコンストラクタを実装しないようにしたいと考えています。 C#でコンストラクタを継承することはできません。 (あなたのコードのように)ベースからの呼び出しのみ –

+0

個人的には、これはC#の最大の失敗の1つだと思います。基本クラスで宣言されたすべてのパブリックメソッドは、派生クラスで自動的に使用できますが、すべてのコンストラクタを明示的に定義する必要があります。基本的な実装を単に呼び出す同じコンストラクタを書く必要があるたびに、C#チームを呪います。 – adelphus

2

ものを行います明示的に基本クラスの別のコンストラクタを呼び出します。

abstract class B 
{ 
    protected B() 
    { 
     ... 
    } 

    protected B(object foo) 
    { 
     ... 
    } 
} 

class D : B 
{ 
    public D() 
     : base() // not actually necessary, since it's called implicitly 
    { 
    } 

    public D(object foo) 
     : base(foo) 
    { 
    } 
} 
+0

基本クラスにデフォルトのコンストラクタがない場合は、派生クラスの要件を満たす答えを返すことができます –

関連する問題