Как скрыть (удалить) методы базового класса в C #? [Дубликат]
This question already has an answer here:
C# - Can publicly inherited methods be hidden (e.g. made private to derived class) 10 answersСуть проблемы в заданной иерархии классов:
class A
{
protected void MethodToExpose()
{}
protected void MethodToHide(object param)
{}
}
class B : A
{
new private void MethodToHide(object param)
{}
protected void NewMethodInB()
{}
}
class C : B
{
public void DoSomething()
{
base.MethodToHide("the parameter"); // This still calls A.MethodToHide()
base.MethodToExpose(); // This calls A.MethodToExpose(), but that's ok
base.NewMethodInB();
}
}
Как я могу предотвратить любые классы, которые наследуются от класса & quot; B & quot; видеть методA.MethodToHide()
? В C ++ это было достаточно просто с помощью объявления, такого какclass B : private A
, но этот синтаксис недопустим в C #.
Для тех, кто заинтересован (или интересно, что яreally пытаемся сделать), то, что мы пытаемся сделать, - это создать оболочку для Rhino.Commons.NHRepository, которая скрывает методы, которые мы не хотим показывать нашей группе разработчиков, поэтому мы можем иметь способ обрезки файлов cookie: разрабатывая наше приложение, за которым могут легко следить новые разработчики. Так что да, я верю, что "Is-A" Тест действителен для всей цепочки (WidgetRepository Is-A BaseRepository Is-A NHRepository).
EditЯ должен был упомянуть, ради аргумента, что класс A является классом API вне нашего контроля. В противном случае проблема становится значительно проще.