Statische Methoden sind viel schneller und benötigen viel weniger Speicher. Es gibt dieses Missverständnis, dass es nur ein bisschen schneller ist. Es ist ein wenig schneller, solange Sie es nicht auf Schleifen legen. Übrigens, einige Schleifen sehen klein aus, sind aber nicht wirklich, weil der Methodenaufruf, der die Schleife enthält, auch eine andere Schleife ist. Sie können den Unterschied im Code erkennen, der die Renderfunktionen ausführt. In vielen Fällen stimmt leider viel weniger Speicher. Eine Instanz ermöglicht das einfache Teilen von Informationen mit Schwestermethoden. Eine statische Methode wird nach der Information fragen, wenn sie sie benötigt.
Aber wie im Fahren von Autos bringt Geschwindigkeit Verantwortung. Statische Methoden haben normalerweise mehr Parameter als ihr Instanzgegenstück. Da eine Instanz dafür sorgt, dass geteilte Variablen zwischengespeichert werden, sehen Ihre Instanzmethoden hübscher aus.
ShapeUtils.DrawCircle(stroke, pen, origin, radius);
ShapeUtils.DrawSquare(stroke, pen, x, y, width, length);
VS
ShapeUtils utils = new ShapeUtils(stroke,pen);
util.DrawCircle(origin,radius);
util.DrawSquare(x,y,width,length);
In diesem Fall, wenn die Instanzvariablen von allen Methoden die meiste Zeit verwendet werden, sind beispielsweise Methoden ziemlich wert. Instanzen sind NICHT ÜBER STATE, es geht um SHARING, obwohl COMMON STATE eine natürliche Form des SHARING ist, sie sind NICHT DIE GLEICHEN. Als allgemeine Faustregel gilt: Wenn die Methode eng mit anderen Methoden gekoppelt ist - sie lieben einander so sehr, dass sie, wenn man sie anruft, auch die andere genannt werden muss und sie wahrscheinlich die gleiche Tasse Wasser teilen-- -, sollte es Instanz gemacht werden. Statische Methoden in Instanzmethoden zu übersetzen ist nicht so schwer. Sie müssen nur die gemeinsam genutzten Parameter verwenden und sie als Instanzvariablen angeben. Anders herum ist es schwieriger.
Oder Sie können eine Proxy-Klasse, die die statischen Methoden zu überbrücken. Während es in der Theorie vielleicht ineffizienter zu sein scheint, erzählt die Praxis eine andere Geschichte. Dies liegt daran, dass Sie immer dann, wenn Sie einmal (oder in einer Schleife) ein DrawSquare aufrufen müssen, direkt zur statischen Methode wechseln. Aber wann immer du es mit DrawCircle wieder und wieder verwenden willst, wirst du den Instanz-Proxy benutzen. Ein Beispiel sind die System.IO-Klassen FileInfo (Instanz) vs Datei (statisch).
Statische Methoden sind testbar. In der Tat sogar noch mehr als einmal testbar. Die Methode GetSum (x, y) wäre sehr gut testbar, nicht nur für den Komponententest, sondern auch für den Belastungstest, den integrierten Test und den Nutzungstest. Instanzmethoden sind gut für Komponententests, aber schrecklich für alle anderen Tests (was mehr zählt als Unitests BTW), weshalb wir heutzutage so viele Bugs bekommen. Die Sache, die ALLE Methoden untestable macht, sind Parameter, die keinen Sinn ergeben wie (Sender s, EventArgs e) oder globaler Zustand wie DateTime.Now. In der Tat sind statische Methoden so gut in der Testbarkeit, dass Sie weniger Fehler im C-Code einer neuen Linux-Distribution sehen als Ihr durchschnittlicher OO-Programmierer (er ist voll von S ***, ich weiß).
Ich denke, das sollte –