Это сценарий:Доступ overrriden публичной собственности в C#
class BaseClass
{
public virtual string Prop {get; set;}
}
class ChildClass : BaseClass
{
public override string Prop {get; set;}
}
//program
...
ChildClass instance = new ChildClass;
Console.WriteLine(instance.Prop); //accessing ChildClass.Prop
...
Вопрос заключается в том, как получить доступ BaseClass.Prop в экземпляре ChildClass? Будет ли кастинг делать трюк?
Console.WriteLine((instance as BaseClass).Prop); //accessing BaseClass.Prop
-EDIT- Много людей предложили литья. В C++ это не сработает, потому что полиморфизм все равно будет гарантировать, что будет вызвано дочернее свойство. Не так ли в C#?
В C++ вы бы решить эту проблему, выполнив:
instance.(BaseClass::get_Prop())
В ответ на ваше редактирование каста есть разница в C# между использованием переопределения, которое затем использует полиморфизм в смысле C++ (хотя вам нужно объявить свой BaseClass.Prop как виртуальный). «Новое» ключевое слово в C# позволяет объявить свойство с тем же именем, что и базовый класс. Это, очевидно, менее распространенный случай. Текущий код, который у вас есть (без модификатора на Base, переопределить модификатор на Child), не будет компилироваться. Вы должны получить «не может переопределить унаследованный элемент ... потому что он не отмечен как« виртуальная, абстрактная или переопределенная »ошибка. – micahtan