接受继承类型的c#泛型类

本文关键字:泛型类 类型 继承 | 更新日期: 2023-09-27 18:04:11

**前言我对泛型很陌生。我创建了一个类,叫做Geno。我的Peno类只包含一个字符串Name属性。我想知道为什么我不能在这个类的方法中调用T.Name。我如何访问T上的属性?关于这是如何工作的有什么好的资源吗?

public class Geno<T> where T : Peno
{
}
public string GetName()
{
   return T.Name;
}

接受继承类型的c#泛型类

您的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;
    }    
}

如果这没有帮助,请给出一个更完整的例子来说明你想做什么

TPeno类型。所以你试着做的是Peno.Name,这可能不是你想要的。这样就可以了:

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

静态属性不支持继承。因此你可以打电话给Peno。名称而不是t

如果在你的情况下你想访问一个普通的属性,你需要创建一个T的实例,它将允许你调用它的属性Name。

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

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