c # Was ist der Unterschied zwischen der statischen Klasse und nicht-statischen (ich spreche über die Klasse selbst nicht das Feld) [duplizieren]

8

Die Syntax ist vielleicht falsch

%Vor%

Und

%Vor%

Ich habe das von einem Beispiel im Internet bekommen. Was nützt der zweite?

    
Athiwat Chunlakhan 14.08.2009, 06:31
quelle

7 Antworten

12

Wenn Sie sich den IL-Code ansehen, ist die statische Klasse abstract und sealed , was zwei wichtige Eigenschaften ergibt:

  • Sie können keine Instanzen daraus erstellen
  • Es kann nicht vererbt werden

Eine Konsequenz des ersten Punktes ist, dass eine statische Klasse keine nicht statischen Member enthalten kann. Es kann viele Verwendungen von statischen Membern in einer nicht statischen Klasse geben. Eine häufige Verwendung ist eine Klassenfabrik:

%Vor%     
Fredrik Mörk 14.08.2009, 06:36
quelle
5

Hier ist der offizielle / MSDN-Hotspot, um mehr über statische Klassen

  

Die Hauptmerkmale einer statischen Klasse   sind:
  * Sie enthalten nur statische Mitglieder.
  * Sie können nicht instanziiert werden.
  * Sie sind versiegelt.
  * Sie können keine Instanzkonstruktoren enthalten

Grundsätzlich ist eine statische Klasse identisch mit einer 'normalen' / nicht-statischen Klasse, die nur statische Methoden und einen privaten Schlüssel hat. Wenn man es als statisch markiert, hilft es, die Absicht zu klären, und hilft dem Compiler bei der Kompilierungszeit, bestimmte Dinge, z. Instanziierung nicht zulassen.

Real-world Anwendungen, die ich mir vorstellen kann: Verwenden Sie es zu Hause oder als eine Möglichkeit zu organisieren

  • Utility-Methoden (Methoden, die keiner Instanz eines Typs zugeordnet sind), z. Math für Min- und Max-Methoden
  • Erweiterungsmethoden, z.B. StopWatchExtensions für eine Reset-Methode für eine Stoppuhr
Gishu 14.08.2009 06:48
quelle
3

Viele Klassen haben sowohl Instanz- als auch statische Methoden. String zum Beispiel hat:

%Vor%

Und

%Vor%

Wenn Sie sich fragen, warum sowohl die Klasse als auch die Methode das static-Schlüsselwort benötigen, ist es einfach designt. Ich sehe, was du fragst, wenn die Klasse statisch ist, dann sind natürlich alle Methoden auch statisch, scheint irgendwie redundant zu sein, um es dort zweimal zu platzieren. Ich weiß nicht, ob es einen guten Grund dafür gibt oder nicht.

    
Spencer Ruport 14.08.2009 06:35
quelle
3

Statische Klassen sind nur ab C # 2 verfügbar. In C # 1 müssten Sie Ihre Klasse versiegeln und angeben, dass sie nicht instanziierbar ist, indem Sie einen privaten Konstruktor hinzufügen, um diese Art von Verhalten zu erhalten.

    
Charlie 14.08.2009 06:49
quelle
2

Wenn Sie eine Klasse als statisch deklarieren:

  • Es ist erlaubt, nur statische Mitglieder ,
  • zu haben
  • Es kann nicht instanziiert werden (es hat keinen öffentlichen Konstruktor) und
  • Es kann nicht vererbt werden (es ist versiegelt).

Jede Klasse, die nicht als statisch deklariert ist, kann instanziiert, geerbt werden und nicht statische Member haben.

    
German Latorre 14.08.2009 06:42
quelle
1

Eine statische Klasse ist im Grunde die gleiche wie eine nicht statische Klasse, aber es gibt einen Unterschied: Eine statische Klasse kann nicht instanziiert werden. Mit anderen Worten, Sie können das neue Schlüsselwort nicht verwenden, um eine Variable des Klassentyps zu erstellen. Da keine Instanzvariable vorhanden ist, greifen Sie auf die Mitglieder einer statischen Klasse zu, indem Sie den Klassennamen selbst verwenden.

%Vor%

dabei muss die Klasse nicht instanziiert werden. Gleiches gilt für den Dateipfad. Sie belegt den eindeutigen Wert der Klasse Speicher für alle Objekte.

%Vor%

dabei ist die Klasse nicht statisch, muss instanziiert werden

    
JavaResp 14.08.2009 07:13
quelle
0

Wie wir wissen, sind Variablen und Funktionen zwei Typen - Instanz und Klasse.

Eine statische Klasse - hat nur Klassenvariablen keine Instanzvariablen.

Daher kann nicht instanziiert werden, nur zugänglich durch Classname.method ().

Es enthält nur private Konstruktoren, es ist kein öffentlicher Konstruktor vorhanden.

Eine statische Klasse enthält nur statische Member.

    
Somya Chaurasia 22.12.2009 09:44
quelle

Tags und Links