可以强制泛型类具有从两个接口之一继承的类型吗?

时间:2009-02-08 04:33:18

标签: c# .net generics

我有一个泛型类,但我希望我的类型被强制从一个或另一个接口继承。例如:

public class MyGeneric<T> where T : IInterface1, IInterface2 {}

以上将强制T从IInterface1和IInterface2进入inherti,但是我可以强制T从IInterface1或IInterface2(或两者)中继承吗?

2 个答案:

答案 0 :(得分:4)

定义一个基本接口 - 它甚至不需要任何成员,并且让Interface1和Interface2都扩展它。然后范围T为基本接口类型。这只适用于您希望从接口派生泛型,而不是框架中的任何现有派生。

public interface BaseInterface
{
}

public interface Interface1 : BaseInterface
{
    void SomeMethod();
}

public interface Interface2 : BaseInterface
{
    void SomeOtherMethod();
}

public class MyGenericClass<T> where T : BaseInterface
{
    ...
}

var myClass1 = new MyGenericClass<Interface1>();

var myClass2 = new MyGenericClass<Interface2>();

答案 1 :(得分:0)

不,你不能这样做。这根本没有意义。

您可以做的最好的事情是创建泛型类的2个空子类,并使泛型类成为抽象类。像这样:

abstract class MyGenericClass<T>
{
  ...
}

public class MyClass1<T> : MyGenericClass<T>, IInterface1
{ }

public class MyClass2<T> : MyGenericClass<T>, IInterface2
{ }