Ab wann müssen Methoden statisch sein?
-
Hallihallo,
im .NET-Framework gibt es Methoden wie z.B.
char.IsNumber()
, die als statisch deklariert sind!
Warum aber hat man es nicht folgendermaßen als Objektmethode deklariert:
char c = 'c'; bool b = c.IsNumber();
Gibt es sozusagen eine Regel, ab wann Methoden statisch sein müssen?
Bin schon gespannt auf die Antworten!
Grüße
-
Ich kann es natürlich nur für mich sagen, aber ich ziehe dabei eigentlich immer in Betracht, wie mit null Werten umgegangen werden soll. Die Methode "String.IsNurrOrEmpty()" hätte beispielsweise als Instanzmethode relativ wenig Sinn.
Ein weiterer Grund könnte mögliche Konsistenz bei der Gestaltung der Methoden sein, wie zum Beispiel in deinem Fall mit "Char.IsNumber()". Diese Methode ist überladen und akzeptiert wahlweise auch einen vollständigen String mit einer Positionsangabe, wodurch sie also gar keine Instanzmethode mehr sein kann.
Wie gesagt, das sind nur meine Beweggründe und versprechen keine Allgemeingültigkeit.
-
FxCop 1.36 schrieb:
Members that do not access instance data or call instance methods can be marked as static (Shared in Visual Basic). After you mark the methods as static, the compiler will emit non-virtual call sites to these members. Emitting non-virtual call sites will prevent a check at runtime for each call that ensures that the current object pointer is non-null. This can result in a measurable performance gain for performance-sensitive code. In some cases, the failure to access the current object instance represents a correctness issue.
Auf deutsch: Wozu eine Instanz einer Klasse anlegen wenn man gar keine benötigt?
-
Gerade die ganzen Hilfsmethoden ('char.IsNumber') sind, finde ich, aus falschen Gründen statisch, denn es *wird* ja auf eine Instanz zugegriffen. Und da es sich um einen Wertetyp handelt, ist diese auch stets gesetzt und nie 'null'.
=> Meine Vermutung ist, dass das ganze hier aus Konsistenz zu Java gemacht wurde. Sinnvoll finde ich es nicht.
-
Konrad Rudolph schrieb:
Gerade die ganzen Hilfsmethoden ('char.IsNumber') sind, finde ich, aus falschen Gründen statisch, denn es *wird* ja auf eine Instanz zugegriffen.
Genau deswegen kommt es mir auch komisch vor, dass es so implementiert wurde...
Das gleicht meiner Meinung nach eher der prozeduralen und nicht der objektorientierten Programmierung!
-
Das gleicht meiner Meinung nach eher der prozeduralen und nicht der objektorientierten Programmierung
Was ja nicht schlecht ist. Schlecht ist nur dass man (weil Java es halt so vorgemacht hat, und man es sich nicht anders zu machen getraut hat?) blöderweise auf freie Funktionen verzichtet hat, und daher jetzt gezwungen ist blöde statische Memberfunktionen zu verwenden.
Blöd deswegen weil man die oft nicht einer einzigen Klasse zuordnen kann, speziell wenn es mehrere Überladungen gibt.
-
hustbaer schrieb:
Schlecht ist nur dass man (weil Java es halt so vorgemacht hat, und man es sich nicht anders zu machen getraut hat?) blöderweise auf freie Funktionen verzichtet hat, und daher jetzt gezwungen ist blöde statische Memberfunktionen zu verwenden.
VB-Module FTW!