Как при помощи system.type изменить тип класса - C#
Формулировка задачи:
как при помощи system.type изменить тип класса.
получается что в каждом классе есть поле "System.Type tip" , которое содержит сведенья о типе этого класса
все это мне нужно для обращения к элементам массива и полям наследников
грубо говоря все элементы массива имеют тип предка class1. а мне нужно обращатся к ним по реальному типу. конечно можно при помощи операторов if as и is проверять что это за классы, но если у меня будет 50 классов это будет немного затруднительно.
короче мне надо как-то вместо типа класса использовать переменную указывающую на этот тип
public class class1 { system.type tip; public class1() { tip = typeof(class1); } } public class class2 : class1 { public class2() : base() { tip = typeof(class2); } } public class class3: class2 { public class3(): base() { tip = typeof(class3); } } public class1[] mas = new class1[3] { mas[0] = class1, mas[1] = class2, mas[2] = class3 } ;
system.type t = mas[2].tip; (t)mas[2].xz //тут у меня ошыбка ( class2) maps[2]. xz. //а тут все работает, хотя поидее эти 2 строчки должны быть идентичны
Решение задачи: «Как при помощи system.type изменить тип класса»
textual
Листинг программы
public class Class1 { public int A { get; set; } public Class1() { A = 1; } } public class Class2 : Class1 { public int B { get; set; } public Class2() : base() { B = 1; } } public class Class3 : Class2 { public int C { get; set; } public Class3() : base() { C = 1; } } static void Main(string[] args) { Class1 class1 = new Class1(); Class2 class2 = new Class2(); Class3 class3 = new Class3(); dynamic[] mas = new Class1[3]; mas[0] = class1; mas[1] = class2; mas[2] = class3; try { mas[1].B = 7; // ошибки не будет mas[1].С = 7; //в ходе работы программы (а не при компиляции) выскочит ошибка, т.к. у класса Class2 свойства C нет } catch { Console.WriteLine("в расчетах используется не верный тип данных"); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д