2016-04-05 25 views
-2

インスタンスクラスの静的コンストラクタと混同しています。C#で静的コンストラクタを使用してデフォルトのコンストラクタが存在しますか?

静的コンストラクタはデフォルトで非公開で、アクセス修飾子は使用できません。したがって、インスタンスクラスに静的コンストラクタを持つデフォルトコンストラクタが存在しますか?

「はい」の場合、なぜですか?コンストラクタ(private staticとlessパラメータ)を既に定義しており、C#コンセプトに従って、コンストラクタを提供すると、デフォルトコンストラクタは存在しません。 (ここで間違っている可能性があります)

いいえ、それでは、静的コンストラクターを使用してインスタンスクラスのオブジェクトを作成できるのはなぜですか。例以下は

を遵守し、正常に実行されます。

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

静的なコンストラクタ(クラスは1つしか持てません)は、自動的に呼び出されるためプライベートです。パラメータを指定したり直接呼び出す方法はありません。 –

答えて

0

我々はコンストラクタを提供する場合は、デフォルトのコンストラクタが存在しません。 (私はここで間違っているかもしれない)

さてあなたは一つのことについて間違っている、上記のステートメントは、インスタンスコンストラクタに関して、ない静的コンストラクタも同様です。

C# language specification.

10.11.4デフォルトコンストラクタ

を見

クラスはなしインスタンスコンストラクタ宣言が含まれていない場合は、 デフォルトのインスタンスコンストラクタが自動的に提供されます。あなたは静的コンストラクタを提供する際

そう、それはデフォルトのインスタンスコンストラクタを持つ任意の関係を持っていなかった、それはあなたのコードの後半で使用しているものです。

+1

お返事ありがとうございました。 – Mukul

0

スタティックコンストラクタはインスタンスコンストラクタには影響しません。クラスをインスタンス化したくない場合は、クラスをstaticとマークします。

public static class OOPS 
{ 
    static OOPS() 
    { 
    } 
} 
関連する問題