2009-02-08 56 views
2

我有一個泛型類,但我希望我的類型被強制從一個或另一個接口繼承。例如:泛型類可以強制從兩個接口之一繼承一個類型嗎?

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

上面將力T從兩個IInterface1和IInterface2到inherti但我力T從IInterface1 OR IInterface2(或兩者)來inhert?

+0

你能舉一個你想寫MyGeneric 的代碼的例子嗎?可能有更好的方式來表達它。 – 2009-02-08 04:42:20

回答

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>(); 
0

不,你不能這樣做。它根本沒有意義。

你可以做的最好的方法是創建2個泛型類的空子類,並使泛型類抽象化。像這樣:

abstract class MyGenericClass<T> 
{ 
    ... 
} 

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

public class MyClass2<T> : MyGenericClass<T>, IInterface2 
{ } 
相關問題