2010-11-08 16 views
145

Was bedeutet es, wenn Sie das static-Schlüsselwort zu einer Methode hinzufügen?Was ist eine "statische Methode" in C#?

public static void doSomething(){ 
    //Well, do something! 
} 

Können Sie das Schlüsselwort static zur Klasse hinzufügen? Was würde es dann bedeuten?

+6

Sie können die statische Methode verwenden, ohne eine Instanz dieser Klasse einfach durch class_name.static_method_name(); –

Antwort

260

Eine Funktion static ist im Gegensatz zu einer regulären Funktion () nicht mit einer Instanz der Klasse verknüpft. Eine static Klasse ist eine Klasse, die nur static Mitglieder enthalten kann und daher nicht instanziiert werden kann.

Zum Beispiel:

class SomeClass { 
    public int InstanceMethod() { return 1; } 
    public static int StaticMethod() { return 42; } 
} 

Um InstanceMethod zu nennen, müssen 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 
+20

Also ist es wie eine Klassenmethode anstelle einer Instanzmethode? – Moshe

+1

@Moshe: Ja, das stimmt. –

+2

@Moshe: Genau. Bei einer statischen Methode benötigen Sie keine Instanz der Klasse, um die Methode aufzurufen, sondern nur die Klasse. –

4

statische Funktion bedeutet, dass es mit der Klasse (nicht einer bestimmten Instanz zugeordnet ist, Klasse, aber die Klasse selbst) und sie kann auch aufgerufen werden, wenn keine Klasseninstanzen existieren.

Statische Klasse bedeutet, dass Klasse nur statische Elemente enthält.

-3

Das static-Schlüsselwort weist den Compiler bei Anwendung auf eine Klasse an, eine einzelne Instanz dieser Klasse zu erstellen. Es ist dann nicht möglich, eine oder mehrere Instanzen der Klasse zu "neu" zu machen. 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. Zum Beispiel wird eine Factory-Methode beim Erstellen einer Instanz einer anderen Klasse oft als statisch deklariert, da dies bedeutet, dass eine bestimmte Instanz der Klasse, die die Faktor-Methode enthält, nicht benötigt wird. nicht verknüpft mit dem Objekt der Klasse

Für eine gute Erklärung, wie, wann und wo MSDN

+8

Nein, eine statische Klasse wird * nie * instanziiert. Da alles darin statisch ist, warum willst du es dann instanziieren? –

+1

Eine 'statische' Klasse hat überhaupt keine Instanz. – SLaks

+4

Sorry Leute, ich verstehe nicht ... Ich sagte, eine einzelne Instanz ist erstellt und Sie können nicht neu. Sicher wird eine einzelne, statische Instanz erstellt, sonst wäre der Code nicht aufrufbar? –

-1

statische Variable sehen. Es kann mit dem Klassennamen zugegriffen werden. Alle Objekte der Klasse teilen statische Variablen.

Durch die Funktion als statisch, wird der Zugriff auf diese Funktion in dieser Datei eingeschränkt.

10

Eine statische Methode, ein Feld, eine Eigenschaft oder ein Ereignis kann in einer 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 Member verwendet werden. Es gibt nur eine Kopie statischer Felder und Ereignisse, 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. Zum Beispiel könnte eine Math-Bibliothek statische Methoden zur Berechnung von Sinus und Cosinus enthalten. Statische Klassenmitglieder werden mit dem Schlüsselwort static vor dem Rückgabetyp der membe erklärt

3

Kurz können Sie nicht die statische Klasse instanziiert: Ex:

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(); 
16

Aus einem anderen Blickwinkel: Beachten Sie, dass Sie einige Änderungen an einem einzelnen String vornehmen möchten. zum Beispiel möchten Sie die Buchstaben Großbuchstaben und so weiter machen. Sie machen eine andere Klasse namens "Tools" für diese Aktionen. Es gibt keine Bedeutung, die Instanz der Klasse "Tools" zu erstellen, da innerhalb dieser Klasse keine Entität verfügbar ist (vergleichen Sie sie mit der Klasse "Person" oder "Teacher"). So wir verwenden static Schlüsselwort, um die "Tools" -Klasse zu verwenden, ohne irgendeine Instanz davon zu machen, und wenn Sie Punkt nach Klassennamen ("Tools") drücken, können Sie auf die Methoden zugreifen, die Sie wollen.

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(); 

    } 
} 
} 
0

Wenn Sie ein „statisches“ Schlüsselwort ein Verfahren hinzufügen, bedeutet dies, dass zugrunde liegende Implementierung für jede Instanz der Klasse das gleiche Ergebnis ergibt. Unnötig zu sagen, dass das Ergebnis mit der Änderung des Werts der Parameter variiert

Verwandte Themen