2011-10-20 122 views
0

我有一個類有一個靜態方法,如下所示。靜態方法調用

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

    static void fm() 
    { 
    ; 
    } 

    void Initialize() 
    { 
    ; 
    } 

} 

現在在程序中如果我打電話給A.fm(),它會調用Initialize方法嗎?

+0

它不會調用'Initialize'方法。 –

回答

2

假設這是在像C++,Java或C#語言:

不會。只有當使用new時,或者該類型的變量(本例中爲A)被聲明爲局部變量時,構造函數纔會被調用。

1

你應該尋找一個靜態構造函數,如果是的話,如果你使用C#,你可能想運行這個代碼。靜態構造函數授予您在運行類中的任何其他代碼之前運行初始化代碼

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方法將首先被調用,然後調用fm()方法。