Вероятно, хороших вариантов нет, так как это не стандартный уровень защиты. Вот один из вариантов
class Parent
{
private void AVeryPrivilegedMethod() {}
public static void AVeryPrivilegedMethod(Child2 c) { ((Parent)c).AVeryPrivilegedMethod(); }
public static void AVeryPrivilegedMethod(Child3 c) { ((Parent)c).AVeryPrivilegedMethod(); }
}
Позже вы называете это так:
Child2 c = new Child2();
Parent.AVeryPrivilegedMethod(c);
Это предполагает, что вы хотите проверить компилятор (не используя отражение во время выполнения для проверки Child2 и Child3), и по какой-то причине вам нужна указанная вами иерархия. Есть и другие ответы, которые предлагают новый уровень подкласса, который может быть лучшим ответом в вашей ситуации. Если нет, то это может помочь.