Мне редко приходилось использовать эту комбинацию модификаторов доступа, так как я думаю, что во всех случаях, кроме самых экстремальных, это показатель плохого дизайна. Однако иногда необходимо, чтобы вспомогательные классы, такие как преобразователи типов и редакторы, обращались к методу внутри вашей сборки, но разрешали доступ к нему только производным классам в других случаях использования.
Примером может служить вызов, который превращает тип в строку для преобразователя типов. ToString()
обычно не используется для этой цели, поэтому у вас может быть вызов ToPersistableString()
, который вы хотите использовать в вашем конвертере типов, поэтому вы можете сделать его internal
. Затем вы решаете, что люди, происходящие из вашего класса, вполне могут захотеть использовать этот вызов как часть своей собственной схемы персистентности для своего производного класса, поэтому вы также сделаете его protected
.
.NET Framework Use
AccessibilityNotifyClients
на Control
- это protected internal
. Используя Reflector , я вижу, что это было сделано для того, чтобы CheckedItemCollection
из CheckListBox
мог получить к нему доступ при изменении проверенных состояний.