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) Никто не может понять, почему дженерики должны вступить в игру здесь вообще. 2) Должен ли быть какой-то общий интерфейс или базовый класс для ваших двух классов? 3) Если вы пытаетесь установить один или другой набор переменных, это должно быть добавлено к той же логике, которая определяет, какой класс возвратиться, так почему же классы в первую очередь? – itsme86
Это не то, для чего используются дженерики, я предлагаю вам перечитать некоторые уроки о дженериках. – Arran
Это моя третья попытка. Надеюсь, я по крайней мере на этот раз. – Anamika