Вчера я подумал, что было бы неплохо реализовать собственный триггер в приложении WPF. Я создал класс MyTrigger, унаследованный от TriggerBase. TriggerBase - это общедоступный абстрактный класс. Так что наследование не проблема. Но конструкторы внутри этого класса помечены как внутренние. Компилятор выдает ошибку, потому что не существует допустимого конструктора. Почему кто-то создает общедоступный класс, но отмечает конструкторы как внутренние?





Одна из причин, о которой я мог подумать, заключается в том, что фактическое создание новых экземпляров будет обрабатываться другим общедоступным классом в той же сборке. Это заставит вас создать экземпляр через этот другой класс - возможно, своего рода реализацию фабричного шаблона.
Если вы хотите, чтобы класс был видимым, но разрешите его подклассы только в вашей собственной сборке. У подклассов могут быть сами общедоступные конструкторы - или к ним можно получить доступ с помощью фабрики.
Я не могу прокомментировать, является ли это хорошим дизайнерским решением для TriggerBase в WPF, но в некоторых ситуациях оно по крайней мере разумно.
Он общедоступен, потому что он используется в качестве базового класса для триггеров, поставляемых с WPF (Trigger, MultiTrigger, EventTrigger, DataTrigger и т. д.). Если бы он не был общедоступным, вы не смогли бы пометить эти классы как общедоступные.
Конструкторы являются внутренними, потому что они не предназначены для использования вами самостоятельно. Я предполагаю, что вы должны быть производным от одного из упомянутых выше классов.