1

ジェネリッククラスの具体的なインスタンス化中に、型をクラス階層のサブセットに制限することは可能ですか?

たとえば、具象ファクトリを作成するときに抽象ファクトリクラスがある場合、ファクトリに配置されるタイプを限定されたタイプのセットに制限できますか。

public abstract class AbstractFactory<K,V>

public sealed class CornerProcessorFactory : AbstractFactory<XYZ, Type>

CornerProcessorFactoryを宣言するときに、階層内の特定の基本クラスまたはインターフェイスに渡される型を制限したいのですが、インスタンス化されたクラスではなく、型として渡される値型を使用します。

4

3 に答える 3

1

次のようなものを使用します。

public sealed class CornerProcessorFactory<T> : AbstractFactory<XYZ, T> where T: ISomething

CornerProcessorFactoryのみの制限が必要な場合。

于 2012-09-14T22:08:09.333 に答える
0

これがサンプルコードです

public abstract class AbstractFactory<K,V>{}

public sealed class CornerProcessorFactory<K,V> : 
    AbstractFactory<K, V> 
    where K : IFoo 
    where V : struct{ }
于 2012-09-14T22:12:36.403 に答える
0

whereキーワードを使用して、Typeパラメーターを制約できます。

public abstract class AbstractFactory<TKey, TValue> : SomeOtherGenericClass<TKey>
   where TKey: class, new()
   where TValue: struct

したがって、ここでは、TKeyは参照型であり、デフォルトコンストラクターを含み、TValueは値型である必要があると言っています。クラスから派生するか、インターフェースを実装するかを指定することもできます。何かのようなもの:

   where TKey: IMyInterface

また

   where TKey: MyBaseClass

したがって、最初のものでは、基本的に、私のTがIMyInterfaceを実装する必要があるために渡されるものは何でも要求します。2つ目では、TがMyBaseClassから派生する必要があるため、渡されるものは何でも要求します。

于 2012-09-14T22:52:21.030 に答える