返回类型为对象的通用方法

时间:2012-06-06 17:09:01

标签: c# generics object return

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

1 个答案:

答案 0 :(得分:2)

似乎问题可能就是你提出问题的方式......

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

我不确定你为什么要强制使用通用方法的盒装对象......