Если доступ к любому производному объекту через тип base является допустимым сценарием (скажем, производные только типы переопределяют base реализации и не добавляйте новые функциональные возможности), тогда предлагаемое решение для создания производных типов вложенных private
классов (как предлагают предыдущие ответы) является лучшим решением.
Если это не так, то я думаю, что вы попадаете в случай неоправданной сложности. По какой причине код из вашей же сборки не может получить доступ к конструкторам ChildA
и ChildB
? В конце концов, код, который вы можете контролировать, так что вы всегда можете выбрать / принудительно выполнить с помощью проверки кода, что он инициализируется с помощью фабричного метода.
Я понимаю, что есть веские причины, по которым внешние сборки не могут свободно создавать объекты, за исключением строго контролируемого механизма. В этом случае просто пометьте конструкторы как internal
.
В противном случае, я не уверен, что вы можете добиться того, что вы претендуете, не создавая определенную сборку только для этого base класса и его производных классов. Определенно нет модификатора доступа, который бы делал статический метод в производном классе видимым только из его base класса.