在<T>

2012-08-03 45 views
4

流C#繼承以指示T從一個實現某些方法的其它類繼承:在<T>

public Class A 
{ 
    public string GetAccessPoint(); 
    public string GetPriorityMap(); 
} 

public Class IndexBuilder<T> where T : A 
{ 
    List<string> Go<T>(T obj) 
    { 
     string aPt=obj.GetAccessPoint(); 
     string pMap=obj.GetPriorityMap(); 
    } 
} 

換句話說,我不能訪問obj的GetAccessPoint和GetPriority地圖雖然我指出,它是遺傳來自A.

+1

是否有一個原因你使用泛型的'IndexBuilder'呢? – 2012-08-03 20:10:29

+0

是的,因爲不是T obj,而是列表obj,並且該列表必須以不同類型的T(以某種方式)被索引 – AstroSharp 2012-08-06 14:45:35

回答

14

這是因爲您重新定義了將Go方法設爲通用時的T值。由於T是在課堂上定義的,因此不需要在Go中重新定義它。試試這個:

public Class IndexBuilder<T> where T : A 
{ 
    List<string> Go(T obj) 
    { 
     string aPt=obj.GetAccessPoint(); 
     string pMap=obj.GetPriorityMap(); 
    } 
} 
3

您在​​,它重新定義T爲不同的類型,這並不一定從A繼承指定一個額外的<T>。請改用List<string> Go(T obj)來避免重新定義T

0

你在用Go方法中的T覆蓋T中的類別。

1

由於explained (correctly) by other answers,問題是你正在定義一個新的<T>你的方法。

這就是說,如果這是你的類的全部,你可能不需要泛型類。下面將很好地工作:

public Class IndexBuilder 
{ 
    List<string> Go(A obj) 
    { 
     string aPt=obj.GetAccessPoint(); 
     string pMap=obj.GetPriorityMap(); 
     // Create list... 
    } 
} 

如果你只是使用的A情況下,直接,沒有必要在IndexBuilder仿製藥。

相關問題