2015-12-11 135 views
0

的原因是兩者之間有什麼區別。什麼是我定義泛型類型T.泛型類和泛型方法,什麼是定義類泛型類在下面的例子

的理由,如果我只定義方法意思一樣定義類類型T的

void Main() 
{ 
    Test1<int> x = new Test1<int>(); 
    x.Test1Method(1); 

    Test2 x1 = new Test2(); 
    x1.Test2Method(1); 
} 

public class Test1<T> 
{ 
    public void Test1Method<T>(T x) 
    { 
     Console.WriteLine(x); 
    } 
} 

public class Test2 
{ 
    public void Test2Method<T>(T x) 
    { 
     Console.WriteLine(x); 
    } 
} 
+1

是否'Test1'有任何其他的方法? 「Test1Method」的類型參數隱藏類的類型參數。 – Lee

+1

你'Test1'類應該是給你編譯器有關使用相同的名稱爲一個通用的參數作爲一個已定義的警告。 –

+0

我看到你的球員點,但隨後如果我只是定義與類型TI類幾乎可以做一切我能做[如果我定義的通用方法],當我會去的泛型類和泛型方法 – loneshark99

回答

1

這是不一樣的,但是當你有一個泛型類型(其中,當類本身是通用的,你只能做)的屬性/字段中的差別僅僅是顯而易見的,或者你有多種方法:在類

public class ArrayWrapper<T> { 
    private T[] elements; 

    public T get(int index) { 
     return elements[index]; 
    } 

    public void set(int index, T value) { 
     elements[index] = value; 
    } 
} 

沒有<T>中, T[] elements字段不會編譯樂,並有可能在get()set()同一對象使用不同的類型。 (正如Lee指出的那樣,當你在類上使用方法時,你可能不想使用<T>,因爲它在兩個地方都會爲該方法實際引入另一個泛型類型參數,而該方法獨立於一類用於該類...)

+0

我明白你的意思但如果我只是用TI類定義類,幾乎可以做任何我可以做的事情[如果我已經定義了泛型方法],那麼我什麼時候才能使用泛型類和泛型方法。 – loneshark99

+1

這取決於您是否希望/需要將方法的類型連接在一起,以及您是否需要/需要通用字段或屬性。在我的示例中,這些都是必需的,但在其他情況下,您可能需要使用獨立類型的方法(但這種方法不太常見,而且更經常使用包含靜態實用程序方法的類)。 –

1

在類Test1中,在類級別上定義的T與在Test1Method方法上定義的T不同。這使得課堂上的T無用。

您可以使用Test1這樣的:

Test1<string> x = new Test1<string>(); 
x.Test1Method(1); 

在這種情況下,第一Tstring和第二T爲int。

因爲它是現在,Test1沒有比Test2不同。

這本來是不同的,如果你定義Test1這樣的:這種變化Test1Method怎麼沒有一個通用的T參數後

public class Test1<T> 
{ 
    public void Test1Method(T x) 
    { 
     Console.WriteLine(x); 
    } 
} 

通知。現在這門課不同於Test2,因爲在Test1中,您在對象構造時指定了T,而在Test2中,每次調用Test2Method時可以有不同的T

這裏是你如何使用(變更後我介紹)這兩個類的例子:

Test1<int> x = new Test1<int>(); 
x.Test1Method(1); //valid 
x.Test1Method(2); //valid 
x.Test1Method("str"); //invalid 

Test2 x1 = new Test2(); 
x1.Test2Method(1); //valid 
x1.Test2Method("str"); //valid