2009-03-28 18 views
7

Javaインスタンス初期化子のC#に相当する

インスタンス変数は、次のように初期化ブロックで初期化できます。

class Example { 
    private int varOne; 
    private int varTwo; 

    { 
     // Instance Initializer 
     varOne = 42; 
     varTwo = 256; 
    } 
} 

C#に相当する構造体はありますか?

[編集]私はこれがインスタンス変数の宣言とインラインであることがわかっています。しかし、私は探していますが、インスタンス変数のC#の静的なコンストラクタに似ています。

+0

pedantryのポイント:instance initialiserブロックとインスタンスフィールドの初期化は、superを呼び出した直後にコンストラクタによって実行されます。 –

+0

@Tom - あなたは発注について正しいです。ソースコードのコメントは削除されます。 – maxyfc

+0

なぜそれが方法の後ろで起こっている場合、それをメソッドにしてコンストラクタから呼び出すのはなぜですか? – toxvaerd

答えて

5

実際にC#には相当するものはありません。 C#がインスタンスを初期化するための唯一の2つの方法を持つオブジェクトが作成された後の宣言ポイント

で初期化を行うための方法はありません明示的に変数を初期化することにより、コンストラクタ

    1. をvariblesが、コンストラクタが実行される前に

  • 7

    他のローカルのコンストラクタは、初期化リストに呼び出すインスタンスコンストラクタを作成します。

    private Example() 
    { 
        //initialize all fields here 
    } 
    
    public Example (/*list of parameters*/) : this() 
    { 
        //do specific work here 
    } 
    

    デフォルトコンストラクタは、すでにアプリケーションのロジックによって要求された場合には、

    private Example() 
    

    をsusbstituteを

    private Example (object dummy) 
    

    と勿論initilization呼び出しを変更します。

    +0

    残念ながら、それは複数のインスタンスイニシャライザブロックを持つことはできません...しかし、一般的なケースでは合理的です。 – TofuBeer

    +0

    好奇心 - 豆腐ビールは何ですか?なぜ複数のインスタンスイニシャライザブロックが必要なのでしょうか?後者については、クラスコード全体に散在しているブロックと、コンストラクタとは別に、メンバーの宣言とは別に、混乱が生じるようです。 – Cheeso

    +0

    concrerteの例 - 私は静的初期化で利用できないいくつかのクラスメソッドに基づいて初期化する必要があるprivate readonlyフィールドがあります。 –

    0

    これは、あなたが特定の場合それが可能だと、エクステントのために何をしたいの場合は以下の通りです:

    ここ
    class Example { 
        public int varOne; 
        public int varTwo; 
    
        public Example(){ 
         Console.WriteLine("varOne : " + varOne + ", varTwo : " + varTwo); 
        } 
    
        public void getValues() 
        { 
         Console.WriteLine("varOne : " + varOne + ", varTwo : " + varTwo); 
        } 
    } 
    
    static void Main(string[] args) 
        { 
         Example e = new Example{ varOne = 42, varTwo = 256}; 
         e.getValues(); 
        } 
    

    、その後、あなたが公共のようにインスタンス変数を必要とする制約があります。

    関連する問題