Was bedeutet es, wenn Sie einer Methode das statische Schlüsselwort hinzufügen?
public static void doSomething(){
//Well, do something!
}
Können Sie das static
Schlüsselwort zur Klasse hinzufügen ? Was würde es dann bedeuten?
Was bedeutet es, wenn Sie einer Methode das statische Schlüsselwort hinzufügen?
public static void doSomething(){
//Well, do something!
}
Können Sie das static
Schlüsselwort zur Klasse hinzufügen ? Was würde es dann bedeuten?
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 nur static
Mitglieder enthalten kann und daher nicht instanziiert werden kann.
Beispielsweise:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
Zum Aufrufen InstanceMethod
benötigen Sie eine Instanz der Klasse:
SomeClass instance = new SomeClass();
instance.InstanceMethod(); //Fine
instance.StaticMethod(); //Won't compile
SomeClass.InstanceMethod(); //Won't compile
SomeClass.StaticMethod(); //Fine
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
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
Console.ReadKey();
}
}
public static class Tools
{
public static string ToUpperCase(string str)
{
return str.ToUpper();
}
}
}
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
In Kürze können Sie die statische Klasse nicht instanziieren: Beispiel:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
Sie können nicht so machen:
myStaticClass msc = new myStaticClass(); // it will cause an error
Sie können nur machen:
myStaticClass.someFunction();
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
static
Klasse hat überhaupt keine Instanz.