**前言我對泛型非常陌生。我有一個叫做Geno的課程。我的Peno類只包含一個字符串Name屬性。我想知道爲什麼我不能在這個類的方法中調用T.Name。我將如何訪問T上的屬性?關於這個工作的任何好資源?接受繼承類型的C#泛型類。
public class Geno<T> where T : Peno
{
}
public string GetName()
{
return T.Name;
}
**前言我對泛型非常陌生。我有一個叫做Geno的課程。我的Peno類只包含一個字符串Name屬性。我想知道爲什麼我不能在這個類的方法中調用T.Name。我將如何訪問T上的屬性?關於這個工作的任何好資源?接受繼承類型的C#泛型類。
public class Geno<T> where T : Peno
{
}
public string GetName()
{
return T.Name;
}
是你的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;
}
}
如果這沒有幫助,請給出一個更完整的例子,說明您正在嘗試做什麼。
呃...打字時我已經想過「快點,你必須比Jon Skeet快!」。也許下次! ;-) – Achim
T
是類型Peno
。所以你試圖做的是Peno.Name
,這可能不是你想要的。像這樣的東西可以工作:
public string GetName(T t)
{
return t.Name;
}
靜態屬性不支持繼承。因此,你可以叫Peno.Name,而不是去爲T.
如果你的情況,你要訪問一個正常的財產,你需要創建T的實例可以讓你通過調用其屬性名稱。
T是一個泛型類型參數,而不是一個參數傳遞到正在使用T.
的一個很好的例子類是List<T>
你說這是一個列表,這意味着你正在創建一個列表包含String類型的對象。
T是一個類型,而不是一個實例。 – deepee1
爲什麼downvote?他說他對泛型很陌生,並且提出了一個很好的問題,他們是如何工作的。 –