Простой факт заключается в том, что это работает, потому что компиляторы позволяют это - дизайнеры думали, что это хорошо.Как только код скомпилирован, приватные / публичные переменные сохраняются в памяти точно таким же образом.(CLR просто знает о различных атрибутах метаданных для них.)
Обоснование : вложенные классы и их члены по-прежнему считаются концептуально / иерархически лежащими в родительском классе.Следовательно, закрытые члены родительского класса всегда доступны с помощью этой семантики.Кроме того, во многих случаях это просто облегчает жизнь программистам, не нарушая объектно-ориентированного правила инкапсуляции!
На самом деле, если вы хотите думать об этом с точки зрения кода, любой код которая попадает в открытые и закрытые скобки данного класса, может получить доступ к своим закрытым членам, независимо от того, находится ли он непосредственно во вложенном классе / struct / и т. д.