Если вы объявляете иерархию наследования, в которой родительский и дочерний класс имеют статический метод с одинаковыми именем и параметрами *, Visual Studio выдаст предупреждение CS0108 :
Пример:
public class BaseClass
{
public static void DoSomething()
{
}
}
public class SubClass : BaseClass
{
public static void DoSomething()
{
}
}
: warning CS0108: 'SubClass.DoSomething()' hides inherited member 'BaseClass.DoSomething()'. Use the new keyword if hiding was intended.
Почему этот метод считается скрытым? Ни один из методов не участвует в иерархии наследования и может быть вызван только с использованием имени класса:
BaseClass.DoSomething();
SubClass.DoSomething();
или неквалифицирован в самом классе. В любом случае нет никакой двусмысленности в отношении того, какой метод вызывается (то есть нет «скрытия»).
* Интересно, что методы могут различаться по типу возвращаемого значения и по-прежнему генерировать одно и то же предупреждение. Однако если типы параметров метода различаются, предупреждение не генерируется.
Обратите внимание, что я не пытаюсь создать аргумент или обсудить статическое наследование или любую другую подобную чушь.