-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が発生するはずです。しかし、私はそれをこのようにすることはできません。これは私の3回目の試みです。少なくとも今回ははっきりしているといいのですが。

4

1 に答える 1

2

問題はあなたの質問の仕方にあるようです...

一般的な制約で where 句を使用して制約します。

ジェネリック メソッドに対してボックス化されたオブジェクトを強制する理由がわかりません...

于 2012-06-06T17:18:43.473 に答える