2011-10-19 6 views
0

抽象基底クラスBaseClassがあるとします。インスタンスメソッドのパラメータをインスタンスの型に制限する

私はそれを次のよう

public void CopyPropertiesFrom<T>(T source) where T == ThisDerivedClass : BaseClass 
{ 
    // ... 
} 

ようになります方法を提供したいのですが、私はこの方法は一般的なことがしたいが、現在のインスタンスのほとんどの派生クラスに限定されます。 (私のメソッドはリフレクションを使用するので、実際に子クラスでCopyPropertiesFromをオーバーライドする必要はありませんが、コンパイル時のタイプセーフティが好きです)

有効なC#でこれを表現する方法はありますか?

答えて

1

これを表現する方法がないだけでなく、コンパイラがとにかく強制することは不可能です。ジェネリックのポイントは、コンパイル時にチェックできることです。あなたはこれを行うには何を期待...コンパイラはたったの約fooBaseClassなどを知っている

BaseClass foo = new DerivedClass(); 
foo.CopyPropertiesFrom<BaseClass>(new OtherDerivedClass()); 

- それはどのように実際と文句を言うために知っておくべき、あなたはfoo.CopyPropertiesFrom<DerivedClass>を呼ぶべきか?

もちろん、メソッド内で確認することができます - しかし、私は、私もそれがジェネリック作ると思いますか分からない:

public void CopyPropertiesFrom(BaseClass other) 
{ 
    if (other.GetClass() != GetClass()) 
    { 
     throw new ArgumentException("..."); 
    } 
} 
1

いいえ、ありません。クラスと派生したもの(継承の深さとは無関係)のみを許可できます。

関連する問題