Was ist das Java-Finale in C #?
Was ist das äquivalent zu Java ist final
in C#?
InformationsquelleAutor der Frage Nosrama | 2009-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist das äquivalent zu Java ist final
in C#?
InformationsquelleAutor der Frage Nosrama | 2009-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
final
keyword hat mehrere Verwendungen in Java. Es entspricht sowohl dersealed
undreadonly
Schlüsselwörter in C#, je nach dem Kontext in dem es verwendet wird.Klassen
Um zu verhindern, dass Unterklassen (Vererbung von der Klasse definiert):
Java
C#
Methoden
Verhindern, dass das überschreiben eines
virtual
Methode.Java
C#
Als Joachim Sauer betont, ein bemerkenswerter Unterschied zwischen den beiden Sprachen ist hier, dass Java standardmäßig markiert alle nicht-statischen Methoden als
virtual
in der Erwägung, dass C# kennzeichnet Sie alssealed
. Daher müssen Sie nur diesealed
- Schlüsselwort in C# wenn Sie möchten, stoppen Sie das weitere überschreiben einer Methode, die ausdrücklich gekennzeichnetvirtual
in der base-Klasse.Variablen
Dass nur eine variable auf einmal vergeben werden:
Java
C#
Als eine Randnotiz, die Wirkung der
readonly
- Schlüsselwort unterscheidet sich von derconst
Schlüsselwort, dass diereadonly
Ausdruck ausgewertet wird, bei Laufzeit eher als compile-Zeitsomit beliebige Ausdrücke.InformationsquelleAutor der Antwort Noldorin
Es hängt vom Kontext ab.
final
Klasse oder Methode, die C# - äquivalent istsealed
.final
Feld, die C# - äquivalent istreadonly
.final
lokale variable oder Methodenparameter, gibt es keine direkten C# - äquivalent.InformationsquelleAutor der Antwort LukeH
Was jeder hier fehlt, ist Java die Gewähr, eindeutige Zuordnung für die endgültige member-Variablen.
Für eine C-Klasse mit final member-variable V wird jeder mögliche Ausführungspfad durch jeden Konstruktor C zuweisen muss V genau einmal - wer nicht zuordnen V oder die Zuweisung V zwei oder mehr Zeiten in einem Fehler resultieren.
C#'s readonly-Schlüsselwort hat keine solche Garantie - der compiler ist mehr als glücklich zu verlassen readonly-Mitglieder nicht zugewiesen oder ermöglichen Sie es, ordnen Sie mehrere Male innerhalb eines Konstruktors.
So, endgültig und readonly (zumindest in Bezug auf die member-Variablen) sind definitiv nicht gleichwertig - Finale ist viel strenger.
InformationsquelleAutor der Antwort Some guy
Java-Klasse, die final und die Methode final -> besiegelt.
Java-member-variable final -> readonly für Laufzeit-Konstante const für compile-Zeit-Konstante.
Kein äquivalent für die Lokale Variable final und die Methode argument Finale
InformationsquelleAutor der Antwort Vijayakumarpl
Wie bereits erwähnt, ist
sealed
ist ein äquivalent vonfinal
für Methoden und Klassen.Als für den rest, es ist kompliziert.
const
kann als ein äquivalent, vorausgesetzt, es ist ein primitiver Typ oder eine immutable Klasse.readonly
können verwendet werden, aber es ist nicht gleich -final
erfordert genau eine Zuordnung auch im Konstruktor.Summiert, C# hat keine direkte Entsprechung von
final
. Während Java fehlen einige nette features von C#, ist es erfrischend für mich als meist ein Java-Programmierer, um zu sehen, wo C# nicht zu liefern, eine gleichwertige.InformationsquelleAutor der Antwort Vlasec
http://en.csharp-online.net/CSharp_FAQ:_What_are_the_differences_between_CSharp_and_Java_constant_declarations
C# Konstanten sind deklariert mit dem Schlüsselwort const für compile-Zeit-Konstanten oder die readonly-Schlüsselwort für Laufzeit-Konstanten. Die Semantik der Konstanten ist die gleiche in beiden mit C# und Java Sprachen.
InformationsquelleAutor der Antwort Krzysztof Krasoń
versiegelt
InformationsquelleAutor der Antwort x2.