namespace TestApp
{
  class Program
  {
    public Program()
    {
      var breakpoint1 = 0;
    }

    static void Main(string[] arguments)
    {
      var breakpoint2 = 0;
    }
  }
}
  • 为什么breakpoint 1从未命中,但总是命中breakpoint 2
  • 在输入Main()之前是否可以执行默认构造函数?
  • 最佳答案

    在没有Main类实例的情况下执行Program方法,这是可能的,因为它是静态方法。静态方法是无需构造/实例化类的对象即可调用的方法。可以像这样直接在类本身上调用它们:

    Program.Main(new string[0]);
    
    // executes the Main static method on Program class
    // with empty string array as argument
    

    构造函数不是静态方法,要达到该断点,您需要实例化Program类,如下所示:
    static void Main(string[] arguments)
    {
      var breakpoint2 = 0;
      new Program(); // breakpoint1 will be hit
    }
    

    另外,您也可以make the constructor static,尽管公认它不是really that useful from a testability standpoint,并且还意味着您将拥有静态变量(全局可用):
    static Program() {
        var breakpoint1 = 0;
        // breakpoint will be hit without an instance of the Program class
    }
    

    您可以阅读有关static methods here的更多信息。

    关于c# - 为什么Program类的默认构造函数从不执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16945561/

    10-16 16:27