2013-07-10 10 views
11

In Scala, è possibile definire una classe base o un tratto (interfaccia) sigillato, in modo che le sole classi che possono estendere tale classe debbano essere collocate nella stessa classe .Sigillatura di classe astratta o interfaccia in classe .NET

Questo è uno schema utile quando si codificano le librerie, esiste qualche equivalente in .NET?

+0

non vedo il vantaggio, potete per favore ELI5? (So ​​cosa vuoi, ma non so perché) – jnovacho

+0

Bene con questo modello puoi effettivamente implementare enumerazioni "sofisticate" e questo è davvero utile. Puoi garantire che ci sono solo un certo numero di implementazioni per la tua classe astratta – Edmondo1984

+0

Oh capisco! Grazie. – jnovacho

risposta

21

L'unico modo per simulare è avere un costruttore privato nella classe astratta e fornire un'implementazione come classi nidificate.

Esempio

public abstract class Foo 
{ 
    private Foo(int k) {} 

    public class Bar : Foo 
    { 
    public Bar() : base(10) {} 
    } 
} 
+5

+1. Oppure il costruttore di marcatori di una classe astratta 'internal' è un'altra opzione simile che puoi ottenere per le classi. –

Problemi correlati