2012-04-16 8 views
10

Würde mir bitte jemand sagen, der Grund für die folgende Verwendung von sealed kompiliert nicht? Während, wenn ich sealed durch final ersetze und es als Java kompiliere, funktioniert es.C# versiegelt vs Java endgültig

private sealed int compInt = 100; 
public bool check(int someInt) 
{ 
    if (someInt > compInt) 
    { 
     return true; 
    } 
    return false; 
} 
+0

http://stackoverflow.com/questions/2069010/is-there-any-functional-difference-between-c-sharp-sealed-and-javas-final-keywo –

+0

Das entspricht 'final' für Mitglieder in C# ist' readonly'. –

Antwort

45

Das ist, weil final in Java viele verschiedene Dinge bedeutet, je nachdem, wo es während sealed in C# gilt nur Klassen und potenziell virtuelle Mitglieder (Methoden, Eigenschaften, Ereignisse).,

  • Klassen, was bedeutet, dass die Klasse nicht vererbt werden können:

    In Java final können angewendet werden. Dies ist das Äquivalent von C# sealed.

  • Methoden, was bedeutet, dass die Methode nicht in einer abgeleiteten Klasse überschrieben werden kann. Dies ist der Standardwert in C#, es sei denn, Sie deklarieren eine Methode als virtual und in einer abgeleiteten Klasse kann dies für weitere abgeleitete Klassen mit sealed wieder verhindert werden.
  • Felder und Variablen, was bedeutet, dass sie nur einmal initialisiert werden können. Für Felder ist das Äquivalent in C# readonly.
+1

"versiegelt in C# gilt nur für Klassen" - es ist nicht wahr, es kann auf Methoden in C# angewendet werden. – Maxim

2

Sealed in C# kann nur auf ein Referenztypen und hat auf Vererbungsbaum Wirkung angewandt werden.

In der Praxis ist der als sealed gekennzeichnete Typ garantiert das letzte "Blatt" im Vererbungsbaum, oder kurz gesagt, Sie können nicht von dem Typ abgeleitet werden, der wie ein sealed deklariert wird.

public sealed class Child : Base 
{ 
} 

public class AnotherAgain : Child //THIS IS NOT ALLOWED 
{ 
} 

Es kann nicht auf ein Mitglied angewendet werden.

2

Tigrans Antwort ist nicht falsch, während Joey ein wenig falsch ist.
Zuerst können Sie auf diese Seite schauen: What is the equivalent of Java's final in C#?.
Das Schlüsselwort sealed kann auf class, instance method und property angewendet werden, aber nicht auf Variablen oder Methoden der Schnittstelle. Klassen mit sealed können nicht vererbt werden. Wenn sealed Methode anziehen, muss es von override in der Firma sein. Jeder struct ist sealed, daher kann struct nicht vererbt werden. Markieren Sie dieses Bild: sealed usage

Verwandte Themen