Вы можете реализовать метод интерфейса, не делая его частью прямого публичного интерфейса класса, используя явный синтаксис реализации интерфейса (, удаляя спецификатор доступа и добавляя префикс имени интерфейса к методу ):
interface IMessage
{
bool Check();
}
class NewClass : IMessage
{
bool IMessage.Check() { }
}
Однако любой, кто может привести к интерфейсу IMessage
, все равно может вызвать Check (). Это не способ предотвратить вызов метода - только очистить открытый интерфейс класса. Если интерфейс является внутренним для вашей сборки, то только классы в этой сборке могут приводить к нему и вызывать метод.
В общем случае .NET не предлагает способ сделать только определенный метод интерфейса внутренним по отношению к реализации интерфейса. Это одна из областей, где вы можете рассмотреть абстрактный базовый класс - там вы можете создавать защищенные абстрактные методы, которые наследники могут реализовать, не подвергая их внешним вызывающим объектам. Например:
abstract class MessageBase
{
protected abstract bool Check();
}
class NewClass : MessageBase
{
protected override bool Check() { ... }
}