2010-01-15 7 views
13

Mögliche Duplizieren:
What is the equivalent of Java’s final in C#?Gibt es einen funktionalen Unterschied zwischen C# versiegelt und dem endgültigen Java-Schlüsselwort?

In Java endgültig als nur eine Klasse mehr gilt.

Also, frage ich mich: Gibt es einen funktionalen Unterschied zwischen den beiden Keywords?

Vielen Dank, und Entschuldigung für eine relativ noob Frage.

Eine schnelle Google-Suche erfüllte meine Bedürfnisse nicht.

+3

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

+0

Warum vergleichen Sie nicht einfach die Dokumentation? –

+1

RTFM, nicht wahr? Nun, schließen wir dieses Q friedlich. Danke euch allen! Ich musste eine Antwort als akzeptiert wählen. –

Antwort

23

Java final Schlüsselwort das Äquivalent von C# 's sealed, readonly und sealed Schlüsselwörter ist.

Zwei dieser drei sind etwas anders in Java und C#:

In Java Methoden standardmäßig virtuell sind, so kann jede Methode final deklariert werden, damit sie nicht außer Kraft gesetzt werden. In C# sind Methoden standardmäßig nicht virtuell, so können die einzigen überschriebenen Methoden deklariert werden sealed (sie zu verhindern, dass weitere überschriebene)

in Java, eine Variable oder ein Feld final erklärt werden kann, um es zu verhindern, dass geändert, nachdem Initialisierung (Und für Felder außerhalb des Konstruktors). In C# können Felder für genau den gleichen Effekt als readonly deklariert werden, lokale Variablen jedoch nicht. Beachten Sie, dass Java kein Äquivalent für das Schlüsselwort const von C# hat. (const s in C# sind zum Zeitpunkt der Kompilierung ausgewertet und die Werte sind hartcodiert statt verwiesen wird)

Für Klassen, C# 's sealed Klassen und Java final Klassen sind genau die gleichen (AFAIK).

+0

@Matthew: Das war kein Tippfehler. C# hat zwei unterschiedliche Verwendungen des Schlüsselworts "versiegelt". In VB sind sie 'NotInheritable' und' NotOverridable' – SLaks

+1

Ich finde die Antwort etwas verwirrend, weshalb ich dachte, dass es ein Tippfehler war. 'sealed' ist ein Schlüsselwort mit mehreren Kontextbedeutungen (wie viele Schlüsselwörter, einschließlich' final', 'default',' using' usw.). C# 'const' wird an vielen Stellen verwendet, an denen Java' static final' verwenden würde; daher denke ich, dass es oben als eines der Äquivalente aufgeführt werden sollte. –

+0

@Matthew: ** Nein **. 'const' in C# ist _not_ äquivalent zu' static final'. – SLaks