Personalmente sceglierei protetto. Se le sottoclassi nel proprio assembly sono sufficienti per chiamare il metodo, perché non dovrebbe creare una sottoclasse in un altro assembly? Forse potresti refactoring della funzionalità in una classe separata (interna) del tutto.
È davvero necessario pensare obiettivamente allo scopo del metodo. L'accessibilità interna mi sembra quasi sempre sbagliata. Principalmente a causa della mia esperienza nel tentativo di derivare da controlli o classi nel framework .NET in cui mi sono imbattuto in un muro di mattoni perché qualcuno ha deciso di contrassegnare una classe
o il metodo
come interno. L'autore originale non ha mai notato che non avere accesso a quel metodo ha reso molto più difficile l'implementazione di una sottoclasse.
EDIT
Per chiarire, l'accessibilità interna per una classe è molto utile e non ero implicando interno in generale è male. Il mio punto era che i metodi interni su una classe altrimenti pubblica mi sembrano sbagliati. Una classe base progettata correttamente non dovrebbe dare un vantaggio ingiusto alle classi derivate nello stesso assembly.
** Esiste forse una terza scelta. ** L'OP potrebbe rendere interno * l'intera classe *, nel qual caso l'accesso "protetto" sul metodo otterrebbe il comportamento desiderato. Il codice al di fuori dell'assembly poteva accedere alla funzionalità della classe tramite un'interfaccia pubblica. Questo potrebbe essere sufficiente per ottenere il comportamento desiderato dall'OP. Lo svantaggio, ovviamente, è che tutta l'eredità al di fuori dell'assemblea sarebbe proibita ... ma l'OP non indica esplicitamente che è un requisito. – LBushkin