2016-05-14 2 views
3

私はシングルトンパターンを理解しています。私は実際にSingleObject()コンストラクタを呼び出しているかを理解することはできませんよシングルトンパターン - オブジェクトの作成

class Program 
{ 
    static void Main(string[] args) 
    { 
     SingleObject objtemp = SingleObject.getInstance();\ 
     objtemp.showMessage(); 
    } 
} 

SingleObject.cs

class SingleObject 
{ 
    static SingleObject obj = new SingleObject(); 

    private SingleObject() 
    { 
    } 

    public static SingleObject getInstance() 
    { 
     return obj; 
    } 

    public void showMessage() 
    { 
     Console.WriteLine("Hello Message"); 
    } 
} 

:私はここのコード

のProgram.csの小片を書かれていますか? getInstance()メソッドを呼び出すと、インスタンスが正しく返されますか?

+2

Singletonパターンに取得するための最良の方法は、このスレッドを読むことです:ときに最初に使用/タッチ/アクセスhttp://csharpindepth.com/Articles/General/Singleton.aspx –

+0

静的メンバーは自動的に初期化されます静的クラス – Chris

+0

スタティックSingleObject obj = new SingleObject(); //これはフィールドです。実行時環境によって、クラスが使用される前にフィールドの初期化が行われます(実装が定義されています)*いつか*。編集:これは問題(フィールド初期化子からコンストラクタを呼び出す)ことができると思う - コンストラクタはすべてのフィールドが初期化されていると仮定することができますが、 'obj'の後に初期化されるフィールドが多い場合は宣言された順に初期化されます。 – ABuckau

答えて

0

基本的な考え方は、コンストラクタを非公開にすることです。したがって、SingleObjectのオブジェクトを外部から初期化することはできません。しかし、クラス自体の中で作成する静的オブジェクトは、プライベートコンストラクタを使用することができます。パブリックメソッドを使用して外部からアクセスできます。

関連する問題