-2
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 应该发生。但我不能这样做。这是我的第三次尝试。我希望我至少这次是清楚的。

4

1 回答 1

2

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

您将在通用约束中使用 where 子句来约束它。

我不确定您为什么要为通用方法强制装箱对象...

于 2012-06-06T17:18:43.473 回答