返回类型为对象的泛型方法

本文关键字:泛型方法 对象 返回类型 | 更新日期: 2023-09-27 18:36:22

ClassA
{
        int a;
        public int aValue
        {
            get { return a; }
        }
}
ClassB : ClassA
{
      int b;
        public int bValue
        {
            get { return b; }
        }
}
ClassC : ClassA
{
      int c;
        public int cValue
        {
            get { return c; }
        }
}
public void getObject(int i) 
{
    if(i==1)
    {
        ClassB objB = new ClassB();
         objB.aValue = 20;
         objB.bValue = 30;
         Console.Writeline(objB.aValue);
         Console.Writeline(objB.bValue);
    }
    else
    {
        ClassC objC = new ClassC();
        objC.aValue = 20;
        objC.cValue = 40;
        Console.Writeline(objC.aValue);
        Console.Writeline(objC.cValue);
    }
}

相反,我想创建返回对象的泛型方法,例如:

public T getObject<T>(int i) where T : class
{
    if(i==1)
    {
        ClassB objB = new ClassB();
         return objB as T;
    }
    else
    {
        ClassC objC = new ClassC();
        return objC as T;
    }
}
public static void main()
{
    Object obj = getObject<Object>(5);
    obj.aValue = 20;
    obj.bValue = 30;
    obj.cValue = 40;
    Console.Writeline(obj.aValue);
    Console.Writeline(obj.bValue);
    Console.Writeline(obj.cValue);
}

在这种情况下,obj = objC 所以 bValue = 30 和 cValue = 40 应该发生。但我做不到这种方式。 这是我的第三次尝试。我希望我至少这次是清楚的。

返回类型为对象的泛型方法

似乎问题可能出在您提出问题的方式上......

您可以在泛型约束中使用 where 子句来约束它。

我不确定您为什么要为泛型方法强制使用盒装对象......