| 

.NET C# Java Javascript Exception

3
Ich experimentiere mit Klassen für mathematische Lösungen. Sie verwenden meist nur statische Methoden. Gibt es die Möglichkeit, bei bestimmten Klassen zu verhindern, dass davon neue Klassen abgeleitet werden, die Vererbung also zu stoppen?
06.12.2011
cipher_nemo 31 2
4 Antworten
4
Dein Stichwort ist "sealed classes" - guckst du: Sealed classes (C#)
06.12.2011
Eiger 1,9k 2 9
Top Antwort +1 ;)
Jürgen Luhr 06.12.2011
3
Ja. sealed (C#-Referenz)

Zum Thema statische Klassen:
Die MSDN schreibt über statische Klassen und Klassenmember
Verwenden Sie statische Klassen als Organisationseinheit für Methoden, die nicht an bestimmte Objekte gebunden sind. Statische Klassen können außerdem die Implementierung vereinfachen und die Ausführung beschleunigen, da Sie kein Objekt erstellen müssen, um die Klassenmethoden aufzurufen. Es ist nützlich, die Methoden in einer Klasse sinnvoll anzuordnen, wie dies z. B. bei den Methoden der Math-Klasse im System-Namespace der Fall ist.

Damit zeigt Matthias eine sehr brauchbare Lösung auf die Frage, da es genau diesen Fall betrifft.

Abgesehen von dem Hinweis aus der MSDN rate ich aus persönlicher Erfahrung eher von statischen Klassen ab. Mit "nicht statischen Klassen" und Interfaces ist man besser für aktuelle Technologien gerüstet. So musste ich z. B. ehemals statische Klassen ändern, um MEF verwenden zu können.

Sollte ich dennoch ein "quasi statisches" Verhalten einer Klasse benötigen, verwende ich ausschließlich das Singleton-Pattern. Statische Klassen kommen nur noch bei Extension Methods vor.
06.12.2011
Jürgen Luhr 7,1k 1 9
Dann kriegst du acuh ein Top Antwort +1 ;)
Eiger 06.12.2011
2
Schaust du hier.

Sealed in C#
NotInheritable in VB.Net

Gruß Karl
06.12.2011
Karl 958 8
Top Antwort +1 ;)
Jürgen Luhr 06.12.2011
2
Sie verwenden meist nur statische Methoden.

Wenn das so gemeint ist, dass Deine Klasse, die Du nicht vererben willst, ausschließlich statische Methoden enthalten soll, kannst Du auch darüber nachdenken, die Klasse insgesamt als statisch zu kennzeichnen. Wie das geht, steht hier: Statische Klassen und statische Klassenmember (C#-Programmierhandbuch). Solche Klasse sind automatisch versiegelt, "sealed" mußt Du dann nicht extra angeben. Ein prominentes Beispiel ist die Math-Klasse im .NET-Framework.
06.12.2011
Matthias Hlawatsch 13,2k 4 9
Das "statisch" hatte ich überlesen. ;)
Aber generell bin ich kein Freund von statischen Klassen / Methoden und setze sie sehr bedacht ein.
Daher favorisiere ich die Kombination "nicht statisch" mit "sealed" und am besten noch entsprechende Interfaces.
Jürgen Luhr 06.12.2011
@Jürgen: Worin siehst du den Nachteil statischer Klassen?
puls200 06.12.2011
@Jürgen Ganz Deiner Meinung. Ich hatte sogar noch überlegt, ob ich einen entsprechenden Passus in die Antwort schreibe. Solange es sich um Klassen handelt, deren Funktionen so allgemein, einfach und elementar sind wie die von Math, halte ich die Wahl aber für gerechtfertigt. Und da cipher_nemo was von Mathe erwähnt hat, hab ich mal optmistisch "zu seinen Gunsten" ;-) entschieden.
Matthias Hlawatsch 06.12.2011
Wieder ein tolles Thema für die Kaffeeküche :)
Leider lässt die Kommentarfunktion nicht genügend Zeichen zu. Auch wenn ich es nicht gerne mache, kommentiere ich hier als Antwort.
Jürgen Luhr 06.12.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH