2015-05-28 18 views
3

我該如何做到這一點?作爲函數參數繼承的泛型

class A { } 
class B : A { } 

class X<T> where T : A { } 
class Y<T> : X<T> where T : A { } 

private static void f(X<A> x) { } 

public static void Main(string[] args) 
{ 
    Y<B> y = new Y<B>(); 
    f(y); // Compiler error here 
} 

Y從A繼承了X,B,但它沒有被編譯。

回答

6

變化的函數定義:

private static void f<T>(X<T> x) where T : A { } 

正如你所定義的,你是說f()必須通過的X<A>一個實例。通過按照我在此處顯示的定義,您說f()將任何具有X<A>作爲父級的類。