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/