2012-06-06 3 views
-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 следует бывает. Но я не могу этого сделать. Это моя третья попытка. Надеюсь, я по крайней мере на этот раз.

+0

Похоже, что вам следует попросить наилучший подход к вашей проблеме, а не как скопировать свой квадратный штифт в круглое отверстие. 1) Никто не может понять, почему дженерики должны вступить в игру здесь вообще. 2) Должен ли быть какой-то общий интерфейс или базовый класс для ваших двух классов? 3) Если вы пытаетесь установить один или другой набор переменных, это должно быть добавлено к той же логике, которая определяет, какой класс возвратиться, так почему же классы в первую очередь? – itsme86

+0

Это не то, для чего используются дженерики, я предлагаю вам перечитать некоторые уроки о дженериках. – Arran

+0

Это моя третья попытка. Надеюсь, я по крайней мере на этот раз. – Anamika

ответ

2

Похоже, что проблема может быть так, как вы задаете ваш вопрос ...

Вы бы использовать где положение в родовом ограничения, чтобы ограничить его ..

Я не знаю, почему ты хотел бы заставить объект в штучной упаковке использовать общий метод ...

+0

+1, этот совет был также приведен в предыдущем воплощении этого вопроса. –

Смежные вопросы