Laden...

Methoden in Klassen vs Methoden außerhalb

Erstellt von JonPorno vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.043 Views
J
JonPorno Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren
Methoden in Klassen vs Methoden außerhalb

Hallihallo liebe Community 😉

Ich hätte eine Frage bezüglich"Methoden in Klassen vs Methoden außerhalb".

Meine Frage wäre was für Unterschiede es bei der Speicherverwaltung gibt (ob es überhaupt welche gibt). Denn generelle Unterschiede würde mir nur beim Methodenaufruf einfallen (welchen ich verstehe).
Also meine Frage: gibt es Unterschiede? wenn ja welche, wenn nein (außer Methodenaufruf) dann bitte tzd. schreiben das es keine gibt, damit ich bescheid weiß 😉

MfG
Forgatsch Stephan

16.828 Beiträge seit 2008
vor 7 Jahren

Eine Methode ist immer Teil einer Klasse... redest Du also womöglich von Instanz-Methoden vs. statische Methoden, oder was genau möchtest Du wissen?

J
JonPorno Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren

Wir sind in der Schule noch keine Profi-Programmierer, und haben am Anfang Methoden geschrieben, welche nicht in einer Klasse waren (statische Methoden). Später als wir zu den Klassen gekommen sind, haben wir die Methoden natürlich in der Klasse geschrieben. Und meine Frage ist, welche Unterschiede darin sind (außer der Methodenaufruf, welcher ja so funkt: "Objektname.Methodenname()") ?

MfG

16.828 Beiträge seit 2008
vor 7 Jahren

Auch statische Methoden sind in einer Klasse, meistens in statischen Klassen (was aber kein Muss ist).

So wie Du um Hilfe bittest, bitten wir vor der Fragestellung Google zu verwenden.
[Hinweis] Wie poste ich richtig? Punkt 1.

Erster Google Treffer:

Performance of static methods vs instance methods

Grundantwort: Unterschied geht quasi in der Messungenauigkeit auf, dass es quasi (Performance-)Unterschiede nur in der Theorie gibt, auch was die Speicherverwaltung betrifft.
Ja, die Speicherverwaltung ist an für sich unterschiedlich (schließlich Instanz vs. Static, Static ist (theoretisch) am gleichen Platz, Instanz (theoretisch) wo anders..).
Das hättest Du selbst mit ein wenig googlen rausgefunden.

Der größte Unterschied ist, dass statische Methoden im Prinzip immer Designfehler darstellen und nicht oder nur eingeschränkt testbar sind.
Ausnahmen sind entsprechen statische Methoden nach gültigen Pattern, wie zB. Erweiterungsmethoden.

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo JonPorno,

ich kann mir nicht vorstellen, wie eine Methode ausserhalb einer Klasse aussehen soll. Hast du Code dafür? Vielleicht können wir dann da Licht reinbringen.

Gruss

Coffeebean

J
JonPorno Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren

Dankesehr!

Nur mein Problem ist: das richtige Fragen stellen (mein Ausdruck), und desswegen finde ich bei google nicht das, was ich gerne haben möchte (zum Thema Informatik, da ich mich nicht so gut auskenne.)

2.207 Beiträge seit 2011
vor 7 Jahren

Hast du Code dafür? Vielleicht können wir dann da Licht reinbringen.

Gruss

Coffeebean

D
985 Beiträge seit 2014
vor 7 Jahren

@JonPorno

Abt hat dir die richtigen Begriffe nach denen du suchen kannst schon genannt.

Was für eine Art Hilfe erwartest du jetzt von uns?

J
JonPorno Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren

Hier ist ein Bild, so wie ich es meine.

Es war (wie immer) schlecht ausgedrückt, da die Methode "MeineMethode" auch innerhalb der Klasse Program liegt.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo JonPorno,

Methoden in Klassen vs Methoden außerhalb

Wie bereits erwähnt wurde gibt es in C# nur Methoden in Klassen. In C++ beispielsweise gibt es auch Methoden / Funktionen die außerhalb einer Klasse sein können. Hier verwechselst du C++ nicht mit C#?

Bei den Methoden in der Klasse gibt es in C# die Unterscheidung zwischen statischen Methoden und Instanz-Methoden. Welche von beiden implementiert werden soll, sollte v.a. vom OO-Design abhängen und nicht von irgendwelchen Mikrooptimierungen.
C#-Code wird durch den Compiler zu IL-Code übersetzt und da gibt es einen Unterschieden zwischen beiden Methoden-Gruppen: callvirt (für Methoden bei denen ein Referenz-Prüfung stattfindet, damit eben keine NullReferenceException auftritt) und call (hier ist die vorhin erwähnte Prüfung nicht nötig, wie z.B. bei statischen Methoden, wenn eine Instanz-Methode eine andere (Instanz-) Methode desselben Objekts aufruft). Da bei call die Referenz-Prüfung fehlt, ist dieser Aufruf marginal schneller -- das soll aber wie erwähnt nicht die Grundlage der Entscheidung zwischen statischer vs. Instanzmethode sein.

BTW: wenn du Code als Text in [[nop][/nop]csharp]-Tags anhängst ist es "netter" und einfacher zu helfen (da z.B. der Code per Copy & Paster übernommen und bearbeitet werden kann).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"