Frage

In C #, was ist der Unterschied zwischen:

public static class ClassName {}

Und:

public class ClassName {}
War es hilfreich?

Lösung

Eine statische Klasse kann nicht instanziert werden, und nur statische Elemente enthalten kann. Daher sind die Anrufe für eine statische Klasse. MyStaticClass.MyMethod(...) oder MyStaticClass.MyConstant

Eine nicht statische Klasse instanziiert werden und können nicht-statische Elemente (Instanzkonstruktoren, destructor, Indexer) enthalten. Ein nicht-statisches Element einer nicht-statischen Klasse aufrufbar ist nur durch ein Objekt:

MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);

Andere Tipps

Als erstes wird ein Kommentar zu einer Antwort gefragt, was „statisch“ bedeutet. In C # Begriffen „statisch“ bedeutet „in Bezug auf die Art selbst, anstatt eine Instanz des Typs“. Der Zugriff auf ein statisches Element (von einem anderen Typ) den Typnamen anstelle eines Verweises oder unter Verwendung eines Wertes. Zum Beispiel:

// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();

Nun, statische Klassen ...

Statische Klassen sind in der Regel als „Utility“ Klassen verwendet. Das bekannteste Beispiel ist wohl System.Math . Es macht keinen Sinn, eine Instanz von Mathematik zu schaffen - es ist nur „ist“. Einige Regeln (beide „kann“ und „nicht“):

  • Statische Klassen ableiten immer von object. Sie können nicht eine andere Basistyp angeben oder die statische Klasse machen eine Schnittstelle implementieren.
  • Statische Klassen keine Instanz Mitglieder haben können -. Alle Variablen, Methoden usw. muss statisch sein
  • Statische Klassen können keine Instanzkonstruktoren und der Compiler deklarieren nicht einen parameterlosen Konstruktor standardmäßig erstellen. (Vor statischen Klassen kamen in C # 2.0, würden die Leute oft eine abstrakte Klasse mit einem privaten Konstruktor erstellen, die Instanziierung verhindert. Keine Notwendigkeit hier.)
  • Statische Klassen sind implizit abstrakt (das heißt, sie zu IL zusammengestellt sind, die eine abstrakte Klasse beschreibt), aber Sie können die abstract Modifikator nicht selbst hinzufügen.
  • Statische Klassen implizit versiegelt sind (das heißt sie sind zu IL zusammengestellt, die eine versiegelte Klasse beschreibt), aber Sie können die sealed Modifikator nicht selbst hinzufügen.
  • Statische Klassen können generisch sein.
  • Statische Klassen können verschachtelt werden, in entweder nicht-statische oder statische Klassen.
  • Statische Klassen können haben Typen verschachtelt, entweder nicht-statische oder statisch.
  • Nur statisch, Top-Level-nicht-generische Klassen Erweiterungsmethoden (C # 3.0) enthalten können.

Eine statische Klasse kann auch nicht aus, während eine nicht-statische Klasse mit statischen Mitgliedern vererbt werden kann, wird vererbt.

public static class ClassName {}

Eine statische Klasse ist wie eine globale Variable: Sie können es überall in Ihrem Code sie ohne Instanziierung verwenden können. Zum Beispiel: Klassenname. Nach dem Punkt-Operator können Sie jede Eigenschaft oder Funktion verwenden.

 public class ClassName {}

Aber wenn Sie nicht-statische Klasse haben, dann müssen Sie eine Instanz dieser Klasse erstellen. Zum Beispiel:

 ClassName classNameObject = new ClassName(); 

Alle Methoden / Eigenschaften in einer statischen Klasse muss statisch sein, während eine ‚normale‘ Klasse eine Mischung aus Instanz und statischen Methoden enthalten kann.

Sie können nicht eine statische Klasse instanziiert (Objekte erstellen). Und es kann nur statische Elemente enthalten.

Beispiel: System.Math

Statische Klasse kann nur statische Elemente enthalten.

Static Mitglied kann zunächst ohne Instanziieren eine Klasse verwendet werden.

Statische Klassen und die Mitglieder werden verwendet, um Daten und Methoden zu erstellen, ohne eine Instanz zugegriffen werden kann (das new Schlüsselwort, können sie nicht einen Konstruktor haben) der Klasse.

Statische Klassen deklariert werden können, wenn es keine Abhängigkeit von der seiner eigenen Objektidentität ist, so dass eine statische Klasse darf nur statische Elemente enthält.

Diese Klassen durch die CLR geladen werden, wenn das Programm oder Namensraum der Klasse enthält, wird geladen.

Sie sind auch verschlossen, kann nicht geerbt werden.

http://www.javaworld.com /javaworld/javaqa/1999-08/01-qa-static2.html - sehr guter Artikel zu diesem Thema. Dies ist für Java. Aber ich denke, Konzept sollte sollte auch in C # gleich.

statische Variable in c

eine Variable lokal zu einer Klasse als Auto Variablen aber statische Variable nicht als Funktion verschwinden nicht mehr active.Their Werte persist.If Steuerung kommt zurück, statische Variablen haben denselben Wert

statische Funktion in c Funktionen, die nicht sichtbar Funktionen in anderen Dateien sind.

* statische Datenelemente in cpp * Datenelemente können Variablen oder Funktionen in cpp sein static gilt für beide Datenelemente die Klasse selbst kann statisch sein „Es gibt nur eine Kopie von statischen Daten memberss von allen Objekten in dieser Klasse geteilt“ statische Datenelemente können nur statische Datenelemente zugreifen

statische Klasse Diese Klasse kann nicht Objekte instanziiert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top