2009-08-21 7 views
1

にサブタイプの限定セットを受け入れる:私のプロジェクトでこれはC#と.NET 3.5</p> <p>のは、私は次のメソッドを持っていると言うであるメソッドの引数

myMethod(myBaseClass mbc) 

、以下のすべてのクラスが継承しますmyBaseClass。

ot1:myBaseClass 
ot2:myBaseClass 
ot3:myBaseClass 
ot4:myBaseClass 

はOT2とOT4私はOT1とOT3でMyMethodはを使用せませんが任意のトリックはありますか、私は基本的に私ができるようにしたい種類ごとにオーバーロードしなければなりませんか?

答えて

5

インターフェイス。メソッドシグネチャを

myMethod(ICastableAsMyBaseClass mbc) 

に変更してから、ot1とot3にICastableAsMyBaseClassを実装してください。

+1

これは、MyBaseClassから派生していないクラスがインターフェイスを実装するのを妨げません。 彼はそれを次のように一般的にすることができます: myMethod (T mbc)T:MyBaseClass、ICastableAsMyBaseClass – Botz3000

+0

それは悪い考えではありません。 – Joel

2

実行時にmbcのクラスをチェックできますが、コンパイル時に間違った時間でメソッドを呼び出すことはできません。

コンパイル時の型チェックをしたい場合は、許可する型ごとにメソッドをオーバーロードする必要があります。

+0

この特定のソリューションでは、両方のコンストラクタを基本型を取るプライベートコンストラクタに委譲できます。これで、コンパイル時の安全性が得られ、コンストラクターを複製する必要はありません。 –

関連する問題