Пытаться скрыть открытый член класса в производном классе, как правило, плохо (*). Попытка скрыть это как средство обеспечения того, чтобы он не вызывался, еще хуже, и, как правило, не сработает.
Не существует каких-либо стандартизированных идиоматических средств, о которых я знаю, чтобы предотвратить доступ к защищенному члену родительского класса в дочернем типе, но объявление нового публичного бесполезного члена явно бесполезного вида было бы одним из подходов. Простейшей такой вещью будет пустой класс. Например, если класс Foo объявляет пустой открытый класс с именем MemberwiseClone, производные от Foo не смогут вызывать MemberwiseClone - вероятно, хорошо, если MemberwiseClone нарушит инварианты класса Foo.
(*) Единственная ситуация, когда это уместно, это когда открытый метод производного класса возвращает более специализированный тип, чем соответствующий метод в базовом классе (например, метод CarFactory.Produce () может вернуть Car, в то время как метод FordExplorerFactory.Produce () может возвращать FordExplorer (который является производным от автомобиля). Кто-то, кто вызывает Produce () для того, что они считают CarFactory (но оказывается FordExplorerFactory), получит автомобиль (который оказывается FordExplorer ), но тот, кто вызывает Produce () для того, что во время компиляции известно как FordExplorerFactory, получит результат, который во время компиляции известен как FordExplorer.