Я обнаружил такое поведение при работе со сторонней библиотекой, где мне нужно было скрыть и изменить один из ее методов.
У меня есть следующие настройки:
interface IBaseInterface
{
string MethodToHide();
}
class BaseClass : IBaseInterface
{
public string MethodToHide()
{
return "BaseClass";
}
}
class ChildClass : BaseClass
{
new public string MethodToHide()
{
return "ChildClass";
}
}
Почему, когда я запускаю следующее:
var i = (IBaseInterface) (new ChildClass());
Console.WriteLine(i.MethodToHide());
, вывод равен
BaseClass
, но при изменении подписи ChildClass на
class ChildClass : BaseClass, IBaseInterface
, вывод будет
ChildClass
Почему я должен явно указывать интерфейс для метода BaseClass, который будет скрыт ChildClass?