2012-02-20 10 views
0

使用できるタイプを厳密に拘束したり強制したりする方法はありますか?使用できるタイプを厳密に適用する方法はありますか? (非常にExplicit Casting)

S <: T 

私はランタイム

If TypeOf value Is T Then 

でこれを行うことができます。しかし、これはコンパイル時のチェックが

Option Strict On 
より好ましいだろう、ランタイムチェックです

Method(value As T) ' Any Type of T including subtypes of T 
Method(value Is T) ' Only take a T not a subtype of T 

ような何か

これは唯一の制限ですそれは(暗黙的な)型の拡大型になります。

すべてのタイプのCoerecionsは明示的でなければなりませんでした。

可能ですか?もしそうなら、どのように?あなたは派生型を受け入れるかどうかには発言権を持っていない - タイプのユーザーとして

+0

サブタイプがベースタイプの有効な代替語句ではない場合はどうしますか(一般に[Liskov Substitution Principle](http://en.wikipedia.org/wiki/Liskov_substitution_principle)))?あなたのシナリオは[Visitor](http://stackoverflow.com/questions/8828857/upcasting-helper-method/8830079#8830079)のようなパターンに向いています。 –

答えて

0

はあなたのようなものを意味しています。 オーナーのタイプがの場合は、クラスにsealedとマークして派生タイプを許可することはできません。

あなたのリクエストは多くのOODの原則に反すると言われています。実際に必要な場合は、デザインを再考することをお勧めします。

+1

まだ 'MyClass'のサブクラスを –

+0

yesで渡すことができます。これはあなたの第1部の質問に対する答えです。制約についての詳細は、http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspxを参照してください。 – alexsuslin

0

いいえ、可能な解決策である

private void Method<T>(T mytype) where T: MyClass 
{ 
} 

関連する問題