Verständnis von Static

Quai

Grünschnabel
Hallo Miteinander,

ich hab mir vorgenommen C# von Grundauf zu lernen. Bisher hatte ich mit C++ und Java mehr oder minder in meiner Schule kontakt. Wirklich begriffen habe ich das OO Konzept aber nie.

Nun bin ich seit gestern an der Thematik "static" kleben geblieben und wollte jetzt hier mal preisgeben wie ich es verstanden habe. In der Hoffnung ein "ja korrekt" oder ein "nein, das ist folgermaßen" von den erfahrernen Usern zu erhalten.

statische Variablen

Also static in Zusammenhang mit Variablen ermöglicht es mir den Variablenwert zu halten solange das Programm ausgeführt wird.

Beispiel:

Code:
Methode()
{
   static int x=0;
   i++;
}

Jedesmal wenn ich die Methode aufrufe, erhöht sich die variable um 1. Der Wert wird also im Speicher gehalten, auch nach Verlassen der Methode.

Würde ich die Variable global deklarieren als Klassenvariable, gelte der darin angegebene Wert für alle Objekte. Das heißt, beeinfluße ich den Werte mittels eines Methode der Klasse, gilt der gesetzte Wert für alle Objekte die bisher von der Klasse instanziert wurden?

Diese Grundidee übertragen auf Methoden verursacht bei mir aber nun ein Verständnisproblem. Wenn ich also eine statische Methode deklariere, heißt es, sie ist nur einmal instanzierbar, richtig? Aber ich könnte theoretisch x-beliebige Objekte von der Klasse instanzieren und somit die Methode mehrmals nutzen. Irgendwie versteh ich das nicht.

Hier der Anstoß meines Verständnisproblems:

Code:
class FrmMain
{

    TextBox txt1 = new TextBox();
    Button btn1 = new Button();
    Label lblMsg = new Label();

    }

 

    private static Methode()
    {
        Warum müsste ich jetzt hier noch mal jedes o.g. Steuerelement neu instanzieren, um es in der Methode nutzen zu können?
    }



Danke für die Hilfe & Gruß
 

zeja

Erfahrenes Mitglied
Statische Methoden gibt es doch aber in Java auch.

Eine statische Methode ist unabhängig von der Instanz einer Klasse, und kann somt einfach mit Klasse.methode aufgerufen werden. Statische Methoden sind Häufig Hilfsmethoden oder Methoden zum Abrufen einer Instanz von einer Klasse wenn es nur eine Instanz geben soll (Singleton).

Statische Methoden können statische Felder nutzen. Aber bitte misch das beides nicht. Es sollte nicht so sein dass eine konkrete Instanz deiner Klasse ein statisches Feld setzt. Das sollte statischen Methoden vorbehalten sein. Auslesen ist dagegen in Ordnung.

Nur zu gern wird static leider von Anfängern mißbraucht. Also überlege dir wirklich ob du es benötigst.

Sowas wir in deinem Beispiel mit dem static int in einer Methode braucht man im Grunde ja nur in C wo man in dem Sinne keine ordentliche Objektorientierung hat. Ansonsten legt man das nämlich einfach in einem Feld der Klasse ab (und zwar ohne static).

Achso: Nächstes Mal bitte ins richige Forum posten. C# ist eine Microsoft Erfindung und gehört zu .NET und ist nicht im C/C++ Bereich anzusiedeln.
 

Dario Linsky

Erfahrenes Mitglied
Sorry, zeja, aber ich verschieb das mal ins Coders Talk. Statische Deklarationen sind ja nicht nur auf C# und Java begrenzt, sondern allgemeine OO.

Grüße, D.