-1

У меня есть два класса. Один базовый, другой производный. Я создаю список, указываю что состоит из элементов базового класса. Без проблем могу добавить туда экземпляр производного класса. Но при обращении к элементу списка, я не могу обратится к публичным полям производного класса. Как это исправить? Хотя перегруженный метод ToString() работает нормально и выводит поля производного класса. Значит они все таки хранятся там.

List<TourPackage> lst = new List<TourPackage>();
        lst.Add(new SpecialTourPackage("Песчаный тур", 32, 50000, 40, 25, 30));
        lst[0].ShowInfo();

2 Answers2

1

Через ссылку базового класса вы можете обращаться только к полям и методам классов-наследников, которые определены в базовом классе.

Конкретно в вашем примере вы можете явно преобразовать значение в производный класс и использовать его как вам угодно.

SpecialTourPackage pack = (SpecialTourPackage)lst[0];
pack.ShowSpecialInfo();
//Или
((SpecialTourPackage)lst[0]).ShowSpecialInfo();

Больше объяснений можно найти здесь https://ru.stackoverflow.com/a/1271081/302769

Cordis
  • 453
0
int discount = ((SpecialTourPackage)lst[0]).Discount;