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?
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.
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.
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 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.
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.