2011-07-29 62 views
0

**前言我對泛型非常陌生。我有一個叫做Geno的課程。我的Peno類只包含一個字符串Name屬性。我想知道爲什麼我不能在這個類的方法中調用T.Name。我將如何訪問T上的屬性?關於這個工作的任何好資源?接受繼承類型的C#泛型類。

public class Geno<T> where T : Peno 
{ 

} 

public string GetName() 
{ 
    return T.Name; 
} 
+1

T是一個類型,而不是一個實例。 – deepee1

+1

爲什麼downvote?他說他對泛型很陌生,並且提出了一個很好的問題,他們是如何工作的。 –

回答

4

是你的Name屬性的一個實例屬性還是靜態屬性?如果它是一個靜態屬性,無論如何你都不會得到多態 - 你可以調用Peno.Name

如果它是一個實例屬性,則需要一個實例來調用它。例如:

public class Geno<T> where T : Peno 
{ 
    private readonly T value; 

    public Geno(T value) 
    { 
     this.value = value; 
    } 

    public string GetName() 
    { 
     return value.Name; 
    }  
} 

如果這沒有幫助,請給出一個更完整的例子,說明您正在嘗試做什麼。

+1

呃...打字時我已經想過「快點,你必須比Jon Skeet快!」。也許下次! ;-) – Achim

2

T是類型Peno。所以你試圖做的是Peno.Name,這可能不是你想要的。像這樣的東西可以工作:

public string GetName(T t) 
{ 
    return t.Name; 
} 
0

靜態屬性不支持繼承。因此,你可以叫Peno.Name,而不是去爲T.

如果你的情況,你要訪問一個正常的財產,你需要創建T的實例可以讓你通過調用其屬性名稱。

0

T是一個泛型類型參數,而不是一個參數傳遞到正在使用T.

的一個很好的例子類是List<T>你說這是一個列表,這意味着你正在創建一個列表包含String類型的對象。