C#泛型类接受继承的类型。

时间:2011-07-29 19:14:33

标签: c# class generics

**前言我对仿制药很新。我有一个名为Geno的课程。我的Peno类只包含一个字符串Name属性。我想知道为什么我不能在这个类的方法中调用T.Name。我如何访问T上的属性?关于它是如何工作的任何好资源?

public class Geno<T> where T : Peno
{

}

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

4 个答案:

答案 0 :(得分: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 :(得分:2)

TPeno类型。所以你要做的是Peno.Name,这可能不是你想要的。像这样的东西会起作用:

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

答案 2 :(得分:0)

静态属性不支持继承。因此,你可以只调用Peno.Name而不是去找T.

如果您要访问普通属性,则需要创建一个T实例,以便调用其属性Name。

答案 3 :(得分:0)

T是通用类型参数,而不是传递给使用T的类的参数。

一个很好的例子是List<T>你说这是一个List,这意味着你要创建一个包含String类型对象的列表。