2012-11-07 10 views

Antwort

22

Sie nicht und Sie können nicht.

Wenn Sie die Klasse als public bereitstellen möchten, muss der Basistyp public sein. Eine andere Möglichkeit ist, eine public interface zu haben, und den Typ nur über die interface verfügbar zu machen (vermutlich mit einer Factory-Methode irgendwo zum Erstellen von Instanzen).

Eine letzte Option ist verkapseln die Basisklasse, anstatt es zu erben.

+0

Oder alle Methoden/Eigenschaften der zu schützenden Basisklasse? aber die Klasse selbst ist öffentlich? – Liam

+0

@ Liam, das hängt davon ab, was Sie vor schützen möchten; Wenn zum Beispiel jemand extern * es ableiten kann, haben sie trotzdem Zugriff auf diese Methoden. –

+0

wahr, würde intern arbeiten? Nicht sicher? – Liam

1

Nur um zu klären, was ich in den Kommentaren auf Antwort @Marc Gravel sagt man konnte

public ChildClass : ParentClass 
{ 

} 

public ParentClass 
{ 
    internal void MethodIdontWantToExpose() 
    { 

    } 

} 

Das sagte ein interface ist wahrscheinlich die beste Lösung

9

es public Make, alle Konstrukteure machen internal (Wenn Sie den Standardkonstruktor verwenden, fügen Sie einen parameterlosen Konstruktor hinzu, um dies zu überschreiben).

Dann während öffentlich und nicht versiegelt, kann es nicht durch externen Code unterklassifiziert werden.

Verwandte Themen