Warum können statische Klassen nur statische Member haben?

7

Wie der Titel schon sagt, möchte ich verstehen, warum statische Klassen nur statische Elemente haben können. Ich hoffe, dass es in allen Programmiersprachen gleich ist. Die Erklärung wäre für alle Sprachen die gleiche, glaube ich.

    
NLV 11.12.2010, 06:44
quelle

6 Antworten

14

Statische Klassen können nicht instanziiert werden, daher hat sie keine Instanz. Nicht-statische Member benötigen eine Instanz ihrer Klasse für den Zugriff. Da die statische Klasse keine Instanz haben kann, können Sie nicht auf die nicht statischen Member zugreifen, falls solche vorhanden sind.

Daher können statische Klassen nur statische Elemente haben

    
Tech Jerk 11.12.2010, 06:48
quelle
7

Es ist keine Designentscheidung, sondern eine logische Entscheidung. Am einfachsten beginnen Sie mit den relevanten Definitionen der Konzepte:

Eine statische Klasse kann nicht instanziiert werden. Das bedeutet, dass Sie keine Objekte vom Typ dieser Klasse erstellen können.

Nicht statische Member sind an eine bestimmte Instanz einer Klasse gebunden. Sie enthalten Daten, die ausschließlich mit einem einzelnen Objekt dieses Klassentyps verknüpft sind.

Wenn also eine statische Klasse nicht statische Member enthält, können Sie niemals auf diese Daten zugreifen oder diese Methode aufrufen, da Sie niemals ein Objekt des Typs dieser statischen Klasse instanziieren können. Stattdessen müssen Sie alle statischen Elemente haben, die direkt von einer statischen Instanz der Klasse aufgerufen werden können.

Sie können jedoch nicht statische Klassen mit statischen Elementen haben. Auf diese Weise können Sie auf die Daten zugreifen oder die Methoden aufrufen, die als statische Member verfügbar gemacht werden, ohne ein Objekt dieser Klasse instanziieren. Sie könnten jedoch auch ein Objekt des Typs dieser Klasse instanziieren und auf nicht statische Member (oder Instanzen) zugreifen. Zum Beispiel, wenn Sie eine Klasse Circle hätten, könnten Sie statische Mitglieder wie eine CalculateArea -Funktion und ein PI -Feld haben. Diese Mitglieder sind im allgemeinen für alle Kreise anwendbar, nur weil sie Kreise sind. Sie können jedoch auch nicht statische Member verwenden, die bestimmten Instanzen dieser Klasse zugeordnet sind, da sie spezifische Kreisobjekte beschreiben. Dies können die Felder Diameter und Circumference sein. Sie könnten auch nicht statische Funktionen haben, die die Fläche des Kreises berechnen, wenn Sie die Daten in den nicht statischen Feldern für diese bestimmte Instanz angeben.

    
Cody Gray 11.12.2010 06:51
quelle
4

Eine statische Klasse kann nicht instanziiert werden. Nicht-statische Mitglieder können daher niemals aufgerufen werden.

Wenn Sie statische Elemente mischen und abgleichen möchten, machen Sie die Klasse nicht statisch.

    
Jonathan Wood 11.12.2010 06:48
quelle
2

Vermutlich, weil Instanzmethoden nie aufgerufen werden konnten.

    
Hamish 11.12.2010 06:48
quelle
1

Wenn Sie ein nicht statisches Element in eine statische Klasse einfügen, handelt es sich nicht um eine statische Klasse. (Sie können eine statische Klasse nicht instanziieren - um nicht statische Member zu haben, müssten Sie in der Lage sein, Instanzen der Klasse zu erstellen, auf der diese Member aufgerufen werden sollen, was sie zu einer regulären Klasse machen würde)

Um es anders zu betrachten, indem Sie eine Klasse als statisch markieren, fragen Sie absichtlich, dass der Compiler Ihnen nicht erlaubt, nicht-statische Methoden in diese Klasse aufzunehmen - das ist eine Designentscheidung, die Sie getroffen haben, und der Compiler hilft zu überprüfen, dass Sie Ihrem eigenen Design folgen.

    
Jason Williams 11.12.2010 06:48
quelle
-1

Ich bin nicht sicher, ob das verwandt ist, aber (zumindest in c # .net 4.0) eine statische Klasse nicht-statische Klassendefinitionen enthalten kann, die nicht-statische Member enthalten. Es scheint also, dass Sie einer statischen Klasse nicht statische Member hinzufügen können, da ein geschachtelter Typ als member .

Beispiel:

%Vor%

Wie Sie sehen können, verfügt die statische Klasse MyClass über eine nicht statische Klassendefinition Typ1, die instanziert werden muss, damit sie verwendet werden kann. Während die statische Funktion staticFunc in MyClass keine Instanz benötigt, auf die zugegriffen werden soll.

%Vor%     
Soenhay 02.05.2012 16:18
quelle

Tags und Links