Sie können die statische Methode verwenden, ohne eine Instanz dieser Klasse zu erstellen, indem Sie einfach class_name.static_method_name () verwenden.
Javed Akram
Auf Programmierebene haben wir das Gefühl, dass wir eine statische Methode aufrufen können, ohne eine Instanz einer Klasse / eines Typs zu erstellen. Intern ist dies nicht der Fall. CLR verwaltet intern eine spezielle Instanz namens Typinstanz zum Verwalten des Aufrufs statischer Methoden. Bitte sehen Sie diese Antwort. Es ist so faszinierend.
RBT
Antworten:
313
Eine staticFunktion ist im Gegensatz zu einer regulären ( Instanz- ) Funktion keiner Instanz der Klasse zugeordnet.
Eine staticKlasse ist eine Klasse, die nur staticMitglieder enthalten kann und daher nicht instanziiert werden kann.
Es ist also wie eine Klassenmethode anstelle einer Instanzmethode?
Moshe
4
@ Moshe: Genau. Bei einer statischen Methode benötigen Sie keine Instanz der Klasse, um die Methode aufzurufen, sondern nur die Klasse.
Binary Worrier
3
Aber gibt es tatsächlich eine technische Einschränkung, die das Aufrufen einer statischen Methode für eine Instanz verhindert? Wenn der Compiler dies zulassen würde, wie hoch ist die Gefahr, dass darauf zugegriffen werden kann?
Wobei "StaticMethod" die Klassenmethode und "InstanceMethod" eine Instanzmethode der Klasse SomeClass ist
Usman Younas
26
Aus einem anderen Blickwinkel: Bedenken Sie, dass Sie einige Änderungen an einem einzelnen String vornehmen möchten. Zum Beispiel möchten Sie die Buchstaben in Großbuchstaben schreiben und so weiter. Sie erstellen eine andere Klasse mit dem Namen "Tools" für diese Aktionen. Es hat keine Bedeutung, eine Instanz der Klasse "Tools" zu erstellen, da in dieser Klasse keine Entität verfügbar ist (vergleiche mit der Klasse "Person" oder "Teacher"). Daher verwenden wir das statische Schlüsselwort, um die Klasse "Tools" zu verwenden, ohne eine Instanz davon zu erstellen. Wenn Sie Punkt nach Klassenname ("Tools") drücken, können Sie auf die gewünschten Methoden zugreifen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1{classProgram{staticvoidMain(string[] args){Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));Console.ReadKey();}}publicstaticclassTools{publicstaticstringToUpperCase(string str){return str.ToUpper();}}}
Die Verwendung von "Änderungen an einer Zeichenfolge vornehmen" ist ein schlechtes Beispiel - Zeichenfolgen sind unveränderlich und können nicht geändert werden. Aber ansonsten macht die Erklärung Sinn (Ersetzen einer Zeichenfolge durch eine nicht unveränderliche Klasse)
Flydog57
13
Eine statische Methode, ein Feld, eine Eigenschaft oder ein Ereignis kann für eine Klasse aufgerufen werden, auch wenn keine Instanz der Klasse erstellt wurde. Wenn Instanzen der Klasse erstellt werden, können sie nicht für den Zugriff auf das statische Element verwendet werden. Es ist nur eine Kopie statischer Felder und Ereignisse vorhanden, und statische Methoden und Eigenschaften können nur auf statische Felder und statische Ereignisse zugreifen. Statische Elemente werden häufig verwendet, um Daten oder Berechnungen darzustellen, die sich nicht als Reaktion auf den Objektstatus ändern. Beispielsweise kann eine Mathematikbibliothek statische Methoden zur Berechnung von Sinus und Cosinus enthalten. Statische Klassenmitglieder werden mit dem Schlüsselwort static vor dem Rückgabetyp der membe deklariert
Statische Funktion bedeutet, dass sie der Klasse zugeordnet ist (keine bestimmte Instanz der Klasse, sondern die Klasse selbst) und auch dann aufgerufen werden kann, wenn keine Klasseninstanzen vorhanden sind.
Statische Klasse bedeutet, dass die Klasse nur statische Elemente enthält.
Wenn Sie einer Methode ein "statisches" Schlüsselwort hinzufügen, bedeutet dies, dass die zugrunde liegende Implementierung für jede Instanz der Klasse dasselbe Ergebnis liefert. Es ist unnötig zu erwähnen, dass das Ergebnis mit der Änderung des Parameterwerts variiert
Die statische Variable ist nicht mit dem Objekt der Klasse verknüpft. Der Zugriff erfolgt über den Klassennamen. Alle Objekte der Klasse teilen sich eine statische Variable.
Wenn Sie die Funktion als statisch festlegen, wird der Zugriff auf diese Funktion in dieser Datei eingeschränkt.
Das statische Schlüsselwort weist den Compiler an, wenn er auf eine Klasse angewendet wird, eine einzelne Instanz dieser Klasse zu erstellen. Es ist dann nicht möglich, eine oder mehrere Instanzen der Klasse neu zu erstellen. Alle Methoden in einer statischen Klasse müssen selbst als statisch deklariert werden.
Es ist möglich und oft wünschenswert, statische Methoden einer nicht statischen Klasse zu haben. Beispielsweise wird eine Factory-Methode beim Erstellen einer Instanz einer anderen Klasse häufig als statisch deklariert, da dies bedeutet, dass eine bestimmte Instanz der Klasse, die die Faktor-Methode enthält, nicht erforderlich ist.
Eine gute Erklärung, wie, wann und wo, finden Sie unter MSDN
Nein, eine statische Klasse wird niemals instanziiert. Da alles in sie statisch ist, warum sollten Sie wollen es instanziiert?
Jon Skeet
1
Eine staticKlasse hat überhaupt keine Instanz.
SLaks
4
Sorry Leute, ich verstehe nicht ... Ich sagte, eine einzelne Instanz wird erstellt und Sie können keine neue erstellen. Sicherlich wird eine einzelne statische Instanz erstellt, sonst wäre der Code nicht aufrufbar?
Dave Arkley
2
Eine statische Klasse hat eine Instanz, tatsächlich zwei, sie sind einfach keine Instanzen des Typs. Auf dem Heap ist eine statische Klasse als Objekt vom Typ [Foo] (Nachschlagetabelle für Methoden usw. für die JIT) und als spezielles System.Type-Objekt für die Initialisierung vorhanden.
McCainz
Eine Klasse kann als statisch deklariert werden, was darauf hinweist, dass sie nur statische Elemente enthält. Es ist nicht möglich, Instanzen einer statischen Klasse mit dem neuen Schlüsselwort zu erstellen. Statische Klassen werden automatisch von der Common Language Runtime (CLR) von .NET Framework geladen, wenn das Programm oder der Namespace mit der Klasse geladen wird.
Antworten:
Eine
static
Funktion ist im Gegensatz zu einer regulären ( Instanz- ) Funktion keiner Instanz der Klasse zugeordnet.Eine
static
Klasse ist eine Klasse, die nurstatic
Mitglieder enthalten kann und daher nicht instanziiert werden kann.Beispielsweise:
Zum Aufrufen
InstanceMethod
benötigen Sie eine Instanz der Klasse:quelle
Aus einem anderen Blickwinkel: Bedenken Sie, dass Sie einige Änderungen an einem einzelnen String vornehmen möchten. Zum Beispiel möchten Sie die Buchstaben in Großbuchstaben schreiben und so weiter. Sie erstellen eine andere Klasse mit dem Namen "Tools" für diese Aktionen. Es hat keine Bedeutung, eine Instanz der Klasse "Tools" zu erstellen, da in dieser Klasse keine Entität verfügbar ist (vergleiche mit der Klasse "Person" oder "Teacher"). Daher verwenden wir das statische Schlüsselwort, um die Klasse "Tools" zu verwenden, ohne eine Instanz davon zu erstellen. Wenn Sie Punkt nach Klassenname ("Tools") drücken, können Sie auf die gewünschten Methoden zugreifen.
quelle
Eine statische Methode, ein Feld, eine Eigenschaft oder ein Ereignis kann für eine Klasse aufgerufen werden, auch wenn keine Instanz der Klasse erstellt wurde. Wenn Instanzen der Klasse erstellt werden, können sie nicht für den Zugriff auf das statische Element verwendet werden. Es ist nur eine Kopie statischer Felder und Ereignisse vorhanden, und statische Methoden und Eigenschaften können nur auf statische Felder und statische Ereignisse zugreifen. Statische Elemente werden häufig verwendet, um Daten oder Berechnungen darzustellen, die sich nicht als Reaktion auf den Objektstatus ändern. Beispielsweise kann eine Mathematikbibliothek statische Methoden zur Berechnung von Sinus und Cosinus enthalten. Statische Klassenmitglieder werden mit dem Schlüsselwort static vor dem Rückgabetyp der membe deklariert
quelle
Statische Funktion bedeutet, dass sie der Klasse zugeordnet ist (keine bestimmte Instanz der Klasse, sondern die Klasse selbst) und auch dann aufgerufen werden kann, wenn keine Klasseninstanzen vorhanden sind.
Statische Klasse bedeutet, dass die Klasse nur statische Elemente enthält.
quelle
In Kürze können Sie die statische Klasse nicht instanziieren: Beispiel:
Sie können nicht so machen:
Sie können nur machen:
quelle
Wenn Sie einer Methode ein "statisches" Schlüsselwort hinzufügen, bedeutet dies, dass die zugrunde liegende Implementierung für jede Instanz der Klasse dasselbe Ergebnis liefert. Es ist unnötig zu erwähnen, dass das Ergebnis mit der Änderung des Parameterwerts variiert
quelle
Die statische Variable ist nicht mit dem Objekt der Klasse verknüpft. Der Zugriff erfolgt über den Klassennamen. Alle Objekte der Klasse teilen sich eine statische Variable.
Wenn Sie die Funktion als statisch festlegen, wird der Zugriff auf diese Funktion in dieser Datei eingeschränkt.
quelle
Kern des statischen Stichwort , dass Sie nur eine Kopie an haben RAM dieser (Methode / Variable / Klasse) , das ist geteilt für alle anruf
quelle
Das statische Schlüsselwort weist den Compiler an, wenn er auf eine Klasse angewendet wird, eine einzelne Instanz dieser Klasse zu erstellen. Es ist dann nicht möglich, eine oder mehrere Instanzen der Klasse neu zu erstellen. Alle Methoden in einer statischen Klasse müssen selbst als statisch deklariert werden.
Es ist möglich und oft wünschenswert, statische Methoden einer nicht statischen Klasse zu haben. Beispielsweise wird eine Factory-Methode beim Erstellen einer Instanz einer anderen Klasse häufig als statisch deklariert, da dies bedeutet, dass eine bestimmte Instanz der Klasse, die die Faktor-Methode enthält, nicht erforderlich ist.
Eine gute Erklärung, wie, wann und wo, finden Sie unter MSDN
quelle
static
Klasse hat überhaupt keine Instanz.