2010-09-04 9 views
5

Nur eine kleine Frage zu C++/CLI. Abstrakte Klassen haben abstrakte Methoden, die von abgeleiteten Klassen implementiert werden, versiegelte Klassen erlauben keine Vererbung.Abstract Sealed Klassen

Warum haben wir also einige Klassen in der .NET-Basisklassenbibliothek definiert als abstrakt versiegelt, und Sie können viel finden .. ??!

+0

Beispiele? Dies ist eine interessante Design-Entscheidung für mich, also wollte ich sehen, welche es getan hat :) –

+0

http://msdn.microsoft.com/en-us/library/system.math.aspx –

Antwort

15

Dies entspricht der "statischen Klasse" in der Sprache C#. Die Sprache, mit der fast alle BCL-Klassen geschrieben wurden. Alle Methoden müssen statisch sein. Es abstrakt und versiegelt zu erklären, hindert jeden daran, von der Klasse abzuleiten und eine Instanz davon zu schaffen.

Die Klassenmethoden sind das genaue Äquivalent von freien Funktionen in der C- und C++ - Sprache. Etwas, das die CLR nicht unterstützt.

+0

Ich stimme völlig mit Ihnen überein, becuause es sieht zum Beispiel wie JAVA'S MATH-Klasse aus, aber warum die msdn-Dokumentation besagt, dass dies nicht möglich oder richtig ist, wenn Sie es tun können ??! –

+0

@Ebraheem Najjar: Dies ist nur direkt auf IL-Ebene möglich. Der Compiler lässt Sie nicht direkt eine 'versiegelte abstrakte' Klasse schreiben. –

+0

Die IL-Attribute einer Klasse unterscheiden sich von den Keywords in der Sprache. In C# macht es keinen Sinn, eine versiegelte Klasse * und * abstrakt zu deklarieren, es wird sich beschweren. Es ist statisch, was diese IL-Attribute aktiviert. Für eine "statische" Klasse gibt es kein CLR-Analogon. –

2

Sie können nicht beide abstrakt und versiegelt, macht es keinen Sinn

Eine versiegelte Klasse kann nicht als Basisklasse verwendet werden. Aus diesem Grund kann es nicht auch eine abstrakte Klasse sein. Versiegelte Klassen verhindern die Ableitung. Da sie nie als Basisklasse verwendet werden können, können einige Laufzeitoptimierungen dazu führen, dass versiegelte Klassenmitglieder etwas schneller aufgerufen werden.

http://msdn.microsoft.com/en-us/library/ms173150.aspx

+0

meinte er C++/cli. versuch öffentliche ref-klasse CProperty versiegelte Zusammenfassung { }; –

+7

Eine statische C# -Klasse ist eigentlich "abstrakt versiegelt", obwohl Sie diese Modifizierer nicht explizit zusammen in Ihrem Code verwenden können. Aber das OP spricht über C++/CLI, wo es kein Konzept der statischen Klasse gibt –

Verwandte Themen