2011-10-20 19 views
0

以下に示すような静的メソッドを持つクラスが1つあります。プログラムで今静的メソッド呼び出し

class A 
{ 
    A() 
    { 
    Initialize(); 
    } 

    static void fm() 
    { 
    ; 
    } 

    void Initialize() 
    { 
    ; 
    } 

} 

私はA.fm()を呼び出した場合、それはInitializeメソッドを呼び出すか、いないのでしょうか?これはC++やJava、またはC#のような言語であると仮定すると

+0

'Initialize'メソッドは呼び出されません。 –

答えて

2

それはしません。コンストラクタは、newが使用されたとき、またはその型の変数(この場合はA)がローカル変数として宣言されたときにのみ呼び出されます。

1

静的なコンストラクタを探している必要があります。もしそうなら、このコードを実行したいかもしれません。静的コンストラクタは、コード内で他のコードを実行する前にの初期化コードを実行することを許可します。

public class A 
{ 
    public static void Method() 
    { 
     Console.WriteLine("METHOD!!!"); 
    } 

    public void Method2() 
    { 
     Console.WriteLine("INSTANCE METHOD!"); 
    } 

    static A() 
    { 
     Console.WriteLine("STATIC CTOR"); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     A.Method(); 
     new A().Method2(); 
     A.Method(); 
     A.Method(); 
     A.Method(); 
     A.Method(); 
     A.Method(); 
     A.Method(); 
    } 
} 

その出力!

STATIC CTOR 
METHOD!!! 
INSTANCE METHOD! 
METHOD!!! 
METHOD!!! 
METHOD!!! 
METHOD!!! 
METHOD!!! 
METHOD!!! 
0

あなたのケースでは、Initializeはデフォルトのコンストラクタ内にあるので、呼び出されません。デフォルトコンストラクタを静的にすると、Initializeメソッドが最初に呼び出され、その後fm()メソッドが呼び出されます。