C#的程序执行顺序

2025-02-25 20:28:07
推荐回答(4个)
回答1:

C# 类的初始化顺序

继承类的static数据成员的初始化器,

继承类的static构造器 (在类名, 第一次被引用时, 调用, 如果, 没有这个构

造器, 则static数据成员何时被初始化, 是不可预测的)

继承类的实例型数据成员的初始化器

在执行继承类的构造器的内容之前;

基类的static数据成员 的初始化器 即 static int a = 1;
/// 类数据成员的定义

基类的static 构造器 ,(如果,基类的类名, 先于继承类被引用, 则先执行基

类的static构造器)

基类的实例型数据成员的初始化器

基类的构造器

接着执行继承类的构造器的内容;

Example :

public class Base
{
A: private static int Number = 12;

B: private int localNumner = 1;

C: static Base()
{
///
}

D: public Base()
{
}
}

public class Child : Base
{
E: private static int ChildNumber = 14;

F: private int local_child_number = 7;

G: static Child()
{
///
}

H: public Child()
{
I: ///
}
}

Child child = new Child();

初始化顺序为

E G F H A C B D I;

static构造器的调用时刻是, 第一次引用该类的类名;

public class Test
{
static Test()
{
}

public staitc int Account
{
get
{
return 1;
}
}

/// 只是举例

public static int GetAccount()
{
return 1;
}

public class Nested
{
}

public delegate void Add();
}

当 X1: Test.Account();

X2: Test a = new Test();

X3: Test.GetAccount();

X4: Test.Nested p = new Test.Nested();

X5: Test.Add a = new Add(someMethods);

{ X1, X2, X3, X4, X5 }, 只要第一次出现其中的某一个; 就调用Test的

static构造器

回答2:

  第一:进入static void Main()
  第二:运行static void Main() 中的Application.Run(new Form1());在这中间对窗体进行构造。
  执行private System.ComponentModel.Container components = null;作用是Container 类是IContainer 接口的默认实现。容器是封装和跟踪零个或更多个组件的对象。在此上下文中,包容是指逻辑包荣, 而不是直观包容。可以在多种方案下使用组件和容器,包括可视化方案和非可视化方案。
  在一个先入先出列表中跟踪容器中的组件,该列表也定义了容器内组件的顺序。
  所添加的组件会附加到列表的结尾。
  执行窗体构造函数public Form1()初始化窗体
  执行构造函数中的InitializeComponent(); 在这个函数中对WINDOWS控件(System.Windows.Forms.Control)和窗体初始化
  执行ResumeLayout(false);ResumeLayout:当调整控件的多个属性时,将先后使用 SuspendLayout 和ResumeLayout 方法取消多个Layout 事件。例如,通常先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,最后调用 ResumeLayout(bool) 方法以使更改生效。默认是TRUE恢复正常的布局逻辑,FALSE改变布局。
  第三:执行后显示窗体,进行程序的运行,等待事件发生,并响应事件。
  第四:关闭窗体. exit Application.Run(可能相当于WINDOWS中的消息循环机制)函数, 程序结束.

回答3:

C#程序是从Main函数开始执行的,也就是说Main()是程序的入口点。
构造器-〉应该是构造函数吧,它是在实例化类的时候执行。静态字段或方法则不需要实例化类即可以使用。

回答4:

哪有那么麻烦,顺序就是 先main入口,然后静态块,静态方法,静态变量初始化,构造在实例化(NEW)的时候再执行,完毕