4

ow 表示 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 继承的。

4

4 回答 4

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();
   }
}
于 2012-08-03T20:01:22.127 回答
3

您正在指定一个额外<T>的 in List<string> Go<T>(T obj),它重新定义T为不一定从继承的不同类型A。改为使用List<string> Go(T obj)以避免重新定义T.

于 2012-08-03T20:01:58.057 回答
1

正如其他答案(正确)解释的那样,问题是您在<T>方法中定义了一个新的。

话虽如此,如果这是您的全部课程,那么您可能无论如何都不需要通用课程。以下将正常工作:

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

如果您只是A直接使用的实例,则不需要在IndexBuilder.

于 2012-08-03T20:10:00.730 回答
0

您正在用方法中的 T 覆盖类中的 T Go

于 2012-08-03T20:04:51.533 回答