限制泛型的具体实例化中的类型

时间:2012-09-14 22:02:53

标签: c# c#-4.0

是否可以在泛型类的具体实例化期间将类型限制为类层次结构的子集。

例如,如果我在创建具体工厂时有一个抽象工厂类,我可以将放入工厂的类型限制为一组有限的类型。

public abstract class AbstractFactory<K,V>

public sealed class CornerProcessorFactory : AbstractFactory<XYZ, Type>

当我声明CornerProcessorFactory时,我想限制传递给层次结构中特定基类或接口的类型,但仍然将值类型作为类型而不是实例化类传递。

3 个答案:

答案 0 :(得分:1)

使用类似的东西:

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

如果您只想限制CornerProcessorFactory。

答案 1 :(得分:0)

以下是示例代码

public abstract class AbstractFactory<K,V>{}

public sealed class CornerProcessorFactory<K,V> : 
    AbstractFactory<K, V> 
    where K : IFoo 
    where V : struct{ }

答案 2 :(得分: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。在第二个中,我要求传递的任何内容都必须从MyBaseClass派生出来