2013-12-17 137 views
-4

考虑以下代码:为什么不调用主类中的默认构造函数?

class Program 
{ 
    static void Main(string[] args) 
    { 
    }  
    public Program() 
    { 
     DoSomthing(); 
    } 
} 

的构造并不call.?Why? 为什么构造函数应该调用? 谁从课堂上创建实例?

+1

很好的面试问题。 –

+1

我很抱歉,但我不认为这是个好问题。他问_why构造函数没有调用_但他甚至没有说_why构造函数应该调用_?他可以通过查看几个MSDN页面在30秒内找到答案。我真的很惊讶这个问题现在得到7 upvotes .. –

+0

@SonerGönül你可以关闭这个问题。 –

回答

13

因为您没有创建实例。只有在创建每个实例时才调用构造函数。 Main()是一个static方法 - 不需要实例即可调用该方法。

你可以使用一个静态构造函数(又名类型初始化):

static Program() 
{ 
    DoSomething(); 
} 
  • 但我会建议先重新思考设计的。
+0

静态构造函数是分离出在成员初始化中无法完成的init的好方法。例如,将命令行params解码为标志。 – Gusdor

+0

@古斯多我不同意;解码命令行参数可以通过'Main'完成。调用静态构造函数的确切时机非常复杂,并且具有足够的边界情况,当您不期望它们时会导致问题 –

+0

_只有在创建每个instance_时才调用构造函数_:static concstructoes也会在调用时调用静态字段被访问或被访问(beforefieldinit)...没有任何实例。 –

相关问题