2016-11-20 15 views
3

抽象クラスで定義されたコンストラクタを持つことができれば、なぜそれが問題なのか、多くの答えが見つかりました。パラメータ化された抽象クラス型のC#コンストラクタ

私は現在の型パラメータを持つ抽象クラスにパラメータ化コンストラクタが利用できるようにしようとしています:

public abstract class Cell<T> 
{ 
    int address; 
    T value; 

    protected Cell<T>(int address, T value) 
    { 

    } 
} 

しかし、C#のは、単純にそれを拒否し、インテリセンスが完全に分解します。 なぜ抽象クラスにコンストラクタを持たせることが可能ですが、抽象クラスが型パラメータを取得するとすぐにすべてがそれを拒否しますか?

+0

これは抽象クラスに特定されていません。任意の汎用クラス/構造体のコンストラクタに同じ構文を使用します。つまり、コンストラクタ名に汎用引数のリストを繰り返さないでください。インスタンスコンストラクタを含め、ジェネリック型のすべての部分で 'T'を使用することができます。 –

答えて

4

コンストラクタ宣言から<T>を削除すると、すべてが機能します。たとえば、これはうまくコンパイルされます:

public abstract class Cell<T> 
{ 
    int address; 
    T value; 

    protected Cell(int address, T value) 
    { 

    } 
} 

public class CellInt : Cell<int> 
{ 
    public CellInt(int address, int value): base(address, value) { } 
} 
2

あなたのコンストラクタは次のようになります。

protected Cell(int address, T value) 
{ 

} 

あなたは、コンストラクタで型パラメータを指定する必要はありません。

抽象クラスのコンストラクタのポイントは、派生クラスが、派生クラスが定義する任意のコンストラクタから抽象クラスのコンストラクタの1つを強制的に呼び出すことです。

関連する問題