ОНОВЛЕННЯ: Це питання було предметом мого блогу у вересні 2014 року . Дякую за чудове запитання!
Існує значна дискусія з цього питання навіть у самій команді упорядника.
По-перше, розумно зрозуміти правила. Публічний член класу або структури - це член, доступний усім, що може отримати доступ до типу, що містить . Отже, громадський член внутрішнього класу фактично є внутрішнім.
Отже, з огляду на внутрішній клас, чи повинні його члени, до яких ви хочете отримати доступ до асамблеї, позначатися як громадські чи внутрішні?
Моя думка така: позначте таких членів як публічних.
Я використовую "public", щоб означати, що "цей член не є детальною інформацією про реалізацію". Захищений член - це деталь реалізації; в цьому є щось, що буде потрібно, щоб зробити похідну роботу класу. Внутрішній член - це деталь реалізації; щось інше внутрішнє для цієї асамблеї потребує члена, щоб правильно працювати. Громадський член каже, що "цей член представляє ключову документально підтверджену функціональність, що надається цим об'єктом".
В основному, моє ставлення таке: припустимо, я вирішив перетворити цей внутрішній клас у суспільний клас. Для цього я хочу змінити саме одне : доступність класу. Якщо перетворення внутрішнього класу в публічний клас означає, що я також повинен перетворити внутрішнього члена на публічний член, то цей член був частиною публічної поверхні класу, і він повинен був бути публічним в першу чергу.
Інші люди не згодні. Є контингент, який каже, що вони хочуть мати можливість поглянути на декларацію члена та одразу дізнатися, чи буде він викликатись лише з внутрішнього коду.
На жаль, це не завжди добре виходить; наприклад, внутрішній клас, який реалізує внутрішній інтерфейс, все ж повинен мати членів-виконавців, позначених як загальнодоступні, оскільки вони є частиною публічної поверхні класу .