2010-06-08 15 views

Antwort

30

static und public sind orthogonale Konzepte (d. H. Sie haben nichts miteinander zu tun).

public bedeutet einfach, dass Benutzer der Klasse diesen Konstruktor aufrufen können (im Gegensatz zu beispielsweise private).

static bedeutet, dass die Methode (in diesem Fall der Konstruktor) nicht zu einer Instanz einer Klasse gehört, sondern zur "Klasse selbst". Insbesondere wird ein statischer Konstruktor einmal automatisch aufgerufen, wenn die Klasse zum ersten Mal verwendet wird.

Darüber hinaus kann ein statischer Konstruktor nicht public oder private gemacht werden, da es nicht manuell aufgerufen werden kann; Es wird nur von der .NET-Laufzeit selbst aufgerufen - es wäre also nicht sinnvoll, es als public zu markieren.

3

Statischer Konstruktor ... Es wird garantiert, während der gesamten Lebensdauer der Anwendung/App Domain "einmal" genannt zu werden. Es kann Anweisungen enthalten, die nur einmal ausgeführt werden sollen.

Öffentlicher Konstruktor ... Da wir einem statischen Konstruktor keine Zugriffsmodifizierer hinzufügen können, bedeutet ein öffentlicher Konstruktor, dass Sie über einen Instanzkonstruktor sprechen. Wenn ein Instanzkonstruktor öffentlich ist, kann die Außenwelt seine Instanzen erstellen. Weitere Optionen sind Intern (kann innerhalb der Bibliothek aufgerufen werden), Privat (nur innerhalb der Klasse).

+1

Wird ein statischer Konstruktor garantiert einmal aufgerufen? Was passiert, wenn der Typ niemals im Lebenszyklus einer App verwendet wird? – MPritchard

+0

@MPritch, Sie haben Recht, in diesem Fall wird es nicht aufgerufen werden. Aber ich muss mich nicht einmal um die Dinge kümmern, die eine Klasse tut (oder nicht tut), wenn ich sie nirgends in meiner Anwendung, Ritus, benutze (oder verweise). –

+0

das hängt alles davon ab, was Sie im Konstruktor tun – MPritchard

22

Der statische Konstruktor wird nur einmal ausgeführt, bevor die Klasse instanziiert wird. Es wird verwendet, wenn Sie möchten, dass nur einmal etwas passiert. Ein schönes Beispiel würde ein Bus-Klasse sein (ähnlich wie etwas, das sie in MSDN article erklären):

public class Bus 
{ 
    public static int busNo = 0; 

    static Bus() 
    { 
     Console.WriteLine("Woey, it's a new day! Drivers are starting to work."); 
    } 

    public Bus() 
    { 
     busNo++; 

     Console.WriteLine("Bus #{0} goes from the depot.", busNo); 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     Bus busOne = new Bus(); 
     Bus busTwo = new Bus(); 
    } 

    // Output: 
    // Woey, it's a new day! Drivers are starting to work. 
    // Bus #1 goes from the depot. 
    // Bus #2 goes from the depot. 
} 
+0

Ich mag es wegen der klaren ersten Zeile: Einfach und unkompliziert! –

2

Static Constructor

Ein Konstruktor mit statischen Modifikator deklariert ein statischer Konstruktor ist. Ein statischer Konstruktor wird verwendet, um statische Daten zu initialisieren oder um eine bestimmte Aktion auszuführen, die nur einmal im Lebenszyklus einer Klasse ausgeführt werden muss. Statischer Konstruktor ist der erste Code-Block, der in der Klasse ausgeführt wird. Der statische Konstruktor wird im Lebenszyklus der Klasse einmalig ausgeführt. Es wird automatisch aufgerufen. Der statische Konstruktor nimmt keine Parameter an. Es hat keine Zugriffsspezifizierer. Es wird nicht direkt aufgerufen.

Instanz oder öffentlicher Constructor

Instanzkonstruktors verwendeten Instanzdaten zu initialisieren. Der Instanzkonstruktor wird jedes Mal aufgerufen, wenn das Objekt der Klasse erstellt wird. Es wird explizit aufgerufen. Der Instance-Konstruktor übernimmt Parameter. Es verfügt über Zugriffsspezifizierer.

Verwandte Themen