我有一個泛型類,但我希望我的類型被強制從一個或另一個接口繼承。例如:泛型類可以強制從兩個接口之一繼承一個類型嗎?
public class MyGeneric<T> where T : IInterface1, IInterface2 {}
上面將力T從兩個IInterface1和IInterface2到inherti但我力T從IInterface1 OR IInterface2(或兩者)來inhert?
我有一個泛型類,但我希望我的類型被強制從一個或另一個接口繼承。例如:泛型類可以強制從兩個接口之一繼承一個類型嗎?
public class MyGeneric<T> where T : IInterface1, IInterface2 {}
上面將力T從兩個IInterface1和IInterface2到inherti但我力T從IInterface1 OR IInterface2(或兩者)來inhert?
定義一個基本接口 - 它甚至不必具有任何成員,並讓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>();
不,你不能這樣做。它根本沒有意義。
你可以做的最好的方法是創建2個泛型類的空子類,並使泛型類抽象化。像這樣:
abstract class MyGenericClass<T>
{
...
}
public class MyClass1<T> : MyGenericClass<T>, IInterface1
{ }
public class MyClass2<T> : MyGenericClass<T>, IInterface2
{ }
你能舉一個你想寫MyGeneric的代碼的例子嗎?可能有更好的方式來表達它。 –
2009-02-08 04:42:20