2016-04-05 6 views
-2

Ich bin verwirrt mit statischen Konstruktor in einer Instanz-Klasse.Gibt es einen Standardkonstruktor mit einem statischen Konstruktor in C#?

Da ein statischer Konstruktor standardmäßig privat ist und wir keinen Zugriffsmodifikator verwenden können, existiert der Standardkonstruktor mit dem statischen Konstruktor in einer Instanzklasse?

Wenn ja, warum? Weil wir bereits einen Konstruktor definiert haben (private static und parameter less) und nach C# concept, wenn wir einen Konstruktor angeben, dann wird der Standardkonstruktor nicht existieren. (Ich könnte hier falsch liegen)

Wenn nein, dann Warum können wir ein Objekt der Instanz-Klasse mit statischen Konstruktor erstellen.

Im Folgenden Beispiel wird erfüllt und die Ausführung erfolgreich:

public class OOPS 
{ 
    static int i = 0; 
    static OOPS(){    
     Console.WriteLine("Static Constructor "); 
    } 

    //OOPS() { 
    // Console.WriteLine("Instance Constructor"); 
    //} 

    public static void ShowStaticMethod() { 
     Console.WriteLine("Static Method "); 
    } 

    public void ShowInstanceMethod() 
    { 
     Console.WriteLine("instance Method"); 
    } 
} 

class Client 
{ 
    public void ClientMethod() { 
     OOPS o = new OOPS(); 
     o.ShowInstanceMethod(); 
     OOPS.ShowStaticMethod(); 
     Console.WriteLine("Client completed");      
     Console.ReadLine(); 
    }   
} 
+0

Der statische Konstruktor (eine Klasse kann nur einen haben) ist privat, weil er automatisch aufgerufen wird - es gibt keine Möglichkeit, Parameter anzugeben oder direkt aufzurufen. –

Antwort

0

wenn wir einen Konstruktor dann der Standard-Konstruktor angegebenen Daten werden nicht existiert. (ich könnte hier falsch sein)

Nun, Sie über eine Sache falsch sind, die obige Aussage in Bezug auf Instanzkonstruktors, nicht statischen Konstruktor wahr.

Blick auf die C# language specification.

10.11.4 Standardkonstruktoren

Wenn eine Klasse enthält kein Instanzkonstruktors Erklärungen, ein Standard Instanzkonstruktors automatisch zur Verfügung gestellt.

Also, wenn Sie den statischen Konstruktor zur Verfügung gestellt, es hat keine Beziehung mit dem Standard Instanzkonstruktors, und das ist das, die Sie später in Ihrem Code verwenden.

+1

Danke Habib für die Antwort .. – Mukul

0

Statischer Konstruktor wirkt sich nicht auf Instanzkonstruktoren aus. Wenn Sie nicht möchten, dass die Klasse instanziiert wird, markieren Sie die Klasse als static.