Попытка скрыть публичный элемент класса в производном классе, как правило, является плохим (*). Попытка скрыть его как средство обеспечения его не будет называться еще хуже и вообще не будет работать.
Существует не стандартизованное идиоматическое средство, которое я знаю о том, чтобы предотвратить доступ к защищенному члену родительского класса в суб-производном типе, но объявление нового публичного бесполезного члена явно бесполезного вида будет одним из подходов , Простейшей из таких вещей был бы пустой класс. Например, если класс Foo объявляет пустой публичный класс с именем MemberwiseClone, производные от Foo не смогут вызвать MemberwiseClone - возможно, это хорошо, если MemberwiseClone нарушит инварианты класса Foo.
(*) Единственная ситуация, когда это уместно, - это когда общедоступный метод производного класса возвращает более специализированный тип, чем соответствующий метод в базовом классе (например, метод CarFactory.Produce() может возвращать автомобиль, в то время как метод FordExplorerFactory.Produce() может возвращать FordExplorer (который происходит от автомобиля). Тот, кто называет Produce() тем, что, по их мнению, является CarFactory (но, случается, это FordExplorerFactory), получит автомобиль (который, оказывается, FordExplorer), но тот, кто называет Produce() на том, что известно во время компиляции, чтобы быть FordExplorerFactory, получит результат, который во время компиляции будет известен как FordExplorer.
+1: Любите метафору «родители против друзей»:) –