Самый простой ответ следующий .....
Все члены в C # всегда используют по меньшей мере доступный модификатор, возможный по умолчанию.
Именно поэтому все классы верхнего уровня в сборке по умолчанию являются «внутренними», что означает, что они являются общедоступными для сборки, в которой они находятся, но являются закрытыми или исключены из доступа к внешним сборкам. Единственный другой вариант для класса верхнего уровня - публичный, который более доступен. Для вложенных типов все это закрыто, за исключением нескольких редких исключений, таких как члены перечислений и интерфейсов, которые могут быть только публичными. Некоторые примеры. В случае классов и интерфейсов верхнего уровня значения по умолчанию:
класс Animal такой же как внутренний класс Animal
интерфейс Animal такой же, как открытый интерфейс Animal
В случае вложенных классов и интерфейсов (внутри типов) значения по умолчанию:
класс животных такой же, как частный класс животных
интерфейс Animal такой же как приватный интерфейс Animal
Если вы просто предполагаете, что значение по умолчанию всегда является самым закрытым, вам не нужно использовать средства доступа, пока вам не нужно изменить значение по умолчанию. Легко.