2009-06-11 90 views
4

我需要指定我的类的泛型类型实现接口,并且也是引用类型。我都尝试下面的代码片段,但没有工作多用于泛型类型

public abstract class MyClass<TMyType> 
    where TMyType : IMyInterface 
    where TMyType : class 

public abstract class MyClass<TMyType> 
     where TMyType : class, IMyInterface 

我不能指定多个,其中一类条款,是有可能做到这一点?

回答

7

后者的语法应该没问题(并为我编译)。第一个不起作用,因为您试图对相同的类型参数提供两个约束,而不是对不同的类型参数。

请给出一个简短但完整的后面的语法不适合你的例子。这适用于我:

public interface IFoo {} 

public abstract class MyClass<T> 
    where T : class, IFoo 
{ 
} 
+0

好的,谢谢。你是对的,第二个片段确实有效。对不起 - 当我尝试时,我得到的编译错误与此无关。应该正确阅读它! – Charlie 2009-06-11 10:48:36

5

关于如何定义多个where子句作为副本链接在这里的问题。如果这个问题确实是重复的,那么完整答案必须包含两种情况。

案例1 - 单一般有多个限制:

public interface IFoo {} 

public abstract class MyClass<T> 
    where T : class, IFoo 
{ 
} 

案例2 - 每个都有自己的约束条件多仿制药:

public interface IFoo1 {} 
public interface IFoo2 {} 

public abstract class MyClass<T1, T2> 
    where T1 : class, IFoo1 
    where T2 : IFoo2 
{ 
}