2012-11-07 17 views

risposta

22

Non si e non si può.

Se si desidera esporre la classe come public, la base-tipo deve esserepublic. Un'altra opzione è quella di avere un public interface e di esporre il tipo solo tramite interface (presumibilmente con un metodo factory da qualche parte per creare istanze).

Un'ultima opzione è incapsulare la la classe base piuttosto che ereditarlo.

+0

Oppure tutti i metodi/proprietà sulla classe base da proteggere? ma la classe stessa deve essere pubblica? – Liam

+0

@Liam che dipende da cosa stai cercando di proteggere; per esempio, se qualcuno esterno può * sottoclasse *, ha comunque accesso a tali metodi. –

+0

vero, sarebbe il lavoro interno? Non sono sicuro? – Liam

1

tanto per chiarire quello che dicevo in commenti sulla risposta di @ Marc Gravel si potrebbe

public ChildClass : ParentClass 
{ 

} 

public ParentClass 
{ 
    internal void MethodIdontWantToExpose() 
    { 

    } 

} 

Detto un interface è probabilmente la soluzione migliore

9

Rendere public, fare tutti i costruttori internal (se stai usando il costruttore predefinito, aggiungi un costruttore senza parametri per sovrascriverlo).

Quindi mentre pubblico e non sigillato, non può essere sottoclassato da codice esterno.

Problemi correlati