namespace TestApp
{
class Program
{
public Program()
{
var breakpoint1 = 0;
}
static void Main(string[] arguments)
{
var breakpoint2 = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
breakpoint 1永远不会受到打击,但它breakpoint 2总能击中?Main()?Spo*_*ike 22
该Main方法在没有Program类实例的情况下执行,这是可能的,因为它是静态方法.静态方法是可以调用的方法,无需从类中构造/实例化对象.它们可以直接在类本身上调用,如下所示:
Program.Main(new string[0]);
// executes the Main static method on Program class
// with empty string array as argument
Run Code Online (Sandbox Code Playgroud)
构造函数不是静态方法,用于命中实例化Program类所需的断点,如下所示:
static void Main(string[] arguments)
{
var breakpoint2 = 0;
new Program(); // breakpoint1 will be hit
}
Run Code Online (Sandbox Code Playgroud)
或者你可以使构造函数变为静态,但是从可测试性的角度来看它确实不是那么有用,并且暗示你将拥有静态变量(全局可用):
static Program() {
var breakpoint1 = 0;
// breakpoint will be hit without an instance of the Program class
}
Run Code Online (Sandbox Code Playgroud)
你可以阅读更多关于静态方法在这里.
NIN*_*OOP 19
你没有实例化这个类.您正在运行一种static Main()方法.运行时将加载类并调用该Main()方法.它不需要类的实例来调用该Main()方法.构造函数将在构造(实例化)对象时运行.
您的方法是静态的:它将在没有现有类的实例的情况下运行.您的构造函数不是:它仅在您创建类的实例时(即,在您编写时new Program())执行.
为了达到你的断点,你很可能想要改变你的构造函数
static Program().
| 归档时间: |
|
| 查看次数: |
2667 次 |
| 最近记录: |