Как при помощи system.type изменить тип класса - C#

Узнай цену своей работы

Формулировка задачи:

как при помощи system.type изменить тип класса.
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 tip" , которое содержит сведенья о типе этого класса все это мне нужно для обращения к элементам массива и полям наследников
system.type t = mas[2].tip;
(t)mas[2].xz  //тут у меня ошыбка
( class2) maps[2]. xz. //а тут все работает, хотя поидее эти 2 строчки должны быть идентичны
грубо говоря все элементы массива имеют тип предка class1. а мне нужно обращатся к ним по реальному типу. конечно можно при помощи операторов if as и is проверять что это за классы, но если у меня будет 50 классов это будет немного затруднительно. короче мне надо как-то вместо типа класса использовать переменную указывающую на этот тип

Решение задачи: «Как при помощи 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("в расчетах используется не верный тип данных");
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы