2010-01-15 6 views
13

Eventuali duplicati:
What is the equivalent of Java’s final in C#?Esiste qualche differenza funzionale tra C# sealed e la parola chiave finale di Java?

In Java finale si applica a più di una semplice classe.

Quindi, mi chiedo: c'è qualche differenza funzionale tra le due parole chiave?

Grazie, e mi dispiace per una domanda relativamente noob.

Una rapida ricerca su Google non ha soddisfatto le mie esigenze.

+3

dup: http://stackoverflow.com/questions/1327544/what-is-the-equivalent-of-javas-final-in-c –

+0

perché non si confronta semplicemente la documentazione? –

+1

RTFM, eh. Bene, chiudiamo questa Q pacificamente. Grazie a tutti! Ho dovuto scegliere una risposta come accettata. –

risposta

23

di Java è l'equivalente di C# s 'sealed, readonly e sealed parole chiave.

Due di questi tre sono un po 'diverso in Java e C#:

In Java, i metodi sono virtuali per impostazione predefinita, in modo che qualsiasi metodo può essere dichiarato final per evitare che venga sovrascritto. In C#, i metodi non sono virtuali per impostazione predefinita, quindi gli unici metodi sovrascritti possono essere dichiarati sealed (Per impedire che vengano ulteriormente ignorati)

In Java, qualsiasi variabile o campo può essere dichiarato final per impedire che venga modificato dopo inizializzazione (E, per i campi, al di fuori del costruttore). In C#, i campi possono essere dichiarati readonly, per lo stesso identico effetto, ma le variabili locali non possono. Si noti che Java non ha equivalenti alla parola chiave const del C#. (const s in C# sono valutati al momento della compilazione, ed i valori sono hard-coded invece di essere riferimento)

Per le classi, C# 's sealed classi e final classi di Java sono esattamente gli stessi (per quanto ne so).

+0

@ Matthew: quello non era un errore di battitura. C# ha due diversi usi della parola chiave 'sealed'. In VB, sono 'NotInheritable' e' NotOverridable' – SLaks

+1

Trovo la risposta un po 'confusa, motivo per cui ho pensato che fosse un refuso. 'sealed' è una parola chiave con più significati contestuali (come molte parole chiave, tra cui' final', 'default',' using', ecc.). C# 'const' è usato in molti posti dove Java userebbe' static final'; quindi, penso che dovrebbe essere elencato in cima a uno degli equivalenti. –

+0

@Matthew: ** No **. 'const' in C# è _not_ equivalente a' static final'. – SLaks