我有一个泛型类,但我希望我的类型被强制从一个或另一个接口继承。例如:
public class MyGeneric<T> where T : IInterface1, IInterface2 {}
以上将强制T从IInterface1和IInterface2进入inherti,但是我可以强制T从IInterface1或IInterface2(或两者)中继承吗?
答案 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
{ }