考慮以下代碼:爲什麼不調用主類中的默認構造函數?
class Program
{
static void Main(string[] args)
{
}
public Program()
{
DoSomthing();
}
}
的構造並不call.?Why? 爲什麼構造函數應該調用? 誰從課堂上創建實例?
考慮以下代碼:爲什麼不調用主類中的默認構造函數?
class Program
{
static void Main(string[] args)
{
}
public Program()
{
DoSomthing();
}
}
的構造並不call.?Why? 爲什麼構造函數應該調用? 誰從課堂上創建實例?
因爲您沒有創建實例。只有在創建每個實例時才調用構造函數。 Main()
是一個static
方法 - 不需要實例即可調用該方法。
你可以使用一個靜態構造函數(又名類型初始化):
static Program()
{
DoSomething();
}
靜態構造函數是分離出在成員初始化中無法完成的init的好方法。例如,將命令行params解碼爲標誌。 – Gusdor
@古斯多我不同意;解碼命令行參數可以通過'Main'完成。調用靜態構造函數的確切時機非常複雜,並且具有足夠的邊界情況,當您不期望它們時會導致問題 –
_只有在創建每個instance_時才調用構造函數_:static concstructoes也會在調用時調用靜態字段被訪問或被訪問(beforefieldinit)...沒有任何實例。 –
很好的面試問題。 –
我很抱歉,但我不認爲這是個好問題。他問_why構造函數沒有調用_但他甚至沒有說_why構造函數應該調用_?他可以通過查看幾個MSDN頁面在30秒內找到答案。我真的很驚訝這個問題現在得到7 upvotes .. –
@SonerGönül你可以關閉這個問題。 –