Единственное, чего здесь не хватает в ответе, - зачем вам это делать?
В некоторых библиотеках есть много классов, которые не предназначены для прикосновения потребителя библиотеки, но они должны наследовать интерфейсы, помеченные как общедоступные. Например, у меня есть библиотека с классом, который наследует интерфейс IComparer, но он используется только внутренне, и я не хочу загромождать публичный аспект моей библиотеки. Если я отмечаю реализованную функцию Compare как внутреннюю, компилятор жалуется, что я не внедряю интерфейс IComparer.
Итак, как мне успешно реализовать интерфейс и в то же время предотвратить его доступность в публичном аспекте моей библиотеки? Пометьте класс как внутренний, но реализованную функцию как открытый.