Persönlich würde ich beschützt wählen. Wenn Unterklassen in Ihrer eigenen Assembly gut genug sind, um die Methode aufzurufen, warum sollte eine Unterklasse in einer anderen Assembly fehlen? Vielleicht könnten Sie die Funktionalität in eine separate (interne) Klasse umgestalten.
Sie müssen wirklich objektiv über den Zweck des Verfahrens denken. Interne Zugänglichkeit fühlt sich fast immer falsch an. Meistens aufgrund meiner Erfahrung versucht, von Kontrollen oder Klassen im .NET-Framework abzuleiten, wo ich in eine Mauer gerannt bin, weil jemand entschied, eine
Klasse oder
Methode als intern zu markieren. Der ursprüngliche Autor hat nie bemerkt, dass der Zugriff auf diese Methode die Implementierung einer Unterklasse erschwert.
EDIT
Um zu klären, ist die interne Zugänglichkeit für eine Klasse sehr nützlich und ich war damit nicht sagen, intern im Allgemeinen schlecht ist. Mein Punkt war, dass interne Methoden in einer ansonsten öffentlichen Klasse mir falsch erscheinen. Eine ordnungsgemäß entworfene Basisklasse sollte abgeleiteten Klassen in derselben Baugruppe keinen unfairen Vorteil verschaffen.
** Es gibt möglicherweise eine dritte Wahl. ** Das OP könnte die * gesamte Klasse * intern machen, in welchem Fall der 'geschützte' Zugriff auf die Methode das gewünschte Verhalten erreichen würde. Code außerhalb der Assembly kann über eine öffentliche Schnittstelle auf die Funktionalität der Klasse zugreifen. Dies kann ausreichen, um das gewünschte Verhalten des OP zu erreichen. Der Nachteil ist natürlich, dass alle Vererbung außerhalb der Versammlung verboten wäre ... aber das OP zeigt explizit nicht an, dass dies eine Voraussetzung ist. – LBushkin