Суть проблемы в том, что для такой иерархии классов:
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 ok
base.NewMethodInB();
}
}
Как я могу запретить какие-либо классы, которые наследуют от класса "В", вид метода A.MethodToHide()
? В С++ это было достаточно легко, используя объявление типа class B : private A
, но этот синтаксис недействителен в С#.
Для тех, кого это интересует (или интересно, что я действительно пытаюсь сделать), мы пытаемся создать оболочку для Rhino.Commons.NHRepository, которая скрывает методы, которые мы не хотим раскрывать нашим группа разработчиков, поэтому у нас есть способ разработки файлов cookie для разработки нашего приложения, к которому легко могут следовать новые разработчики. Так что да, я считаю, что тест "Is-A" действителен для всей цепочки (WidgetRepository Is-A BaseRepository Is-NHRepository).
Изменить. Я должен был упомянуть, ради аргумента, что класс A является классом API за пределами нашего контроля. В противном случае проблема становится значительно проще.