Personalmente elegiría protegido. Si las subclases en su propio ensamblaje son lo suficientemente buenas como para llamar al método, ¿por qué no una subclase en otro ensamblado? Quizás podría refactorizar la funcionalidad en una clase separada (interna) por completo.
Realmente necesita pensar objetivamente sobre el propósito del método. La accesibilidad interna casi siempre me parece mal. Principalmente debido a mi experiencia tratando de derivar de controles o clases en el framework .NET donde me topé con una pared de ladrillo porque alguien decidió marcar una clase
o
como interna. El autor original nunca notó que no tener acceso a ese método dificultaba mucho la implementación de una subclase.
EDITAR
Para aclarar, accesibilidad interna para una clase es muy útil y yo no estaba dando a entender interior en general es malo. Mi punto era que los métodos internos en una clase que de otro modo sería pública me parecen erróneos. Una clase base diseñada correctamente no debe dar una ventaja injusta a las clases derivadas en el mismo ensamblado.
** Posiblemente haya una tercera opción. ** El OP podría hacer que * toda la clase * sea interna, en cuyo caso el acceso 'protegido' en el método lograría el comportamiento deseado. El código fuera del ensamblado podría acceder a la funcionalidad de la clase a través de una interfaz pública. Eso puede ser suficiente para lograr el comportamiento deseado de OP. La desventaja, por supuesto, es que toda la herencia fuera de la asamblea estaría prohibida ... pero el OP explícitamente no indica que es un requisito. – LBushkin