C#中类的方法执行顺序是按照继承层次关系和调用顺序决定的,具体执行顺序如下:
- 静态构造函数
- 非静态构造函数
- 静态方法
- 非静态方法
其中,静态成员在程序启动时就已经存在,因此静态构造函数是在其他方法之前第一个运行的。而非静态成员只有在实例化对象后才会存在,因此非静态构造函数是在静态构造函数之后但在其他方法之前运行的。
下面是两个简单的例子,说明类中方法的执行顺序:
- 示例一
class Program
{
static void Main(string[] args)
{
MyClass.Test();
}
}
class MyClass
{
static MyClass()
{
Console.WriteLine("MyClass的静态构造函数被执行");
}
public MyClass()
{
Console.WriteLine("MyClass的构造函数被执行");
}
public static void Test()
{
Console.WriteLine("MyClass的静态方法被执行");
MyClass obj = new MyClass();
Console.WriteLine("MyClass的非静态方法被执行");
}
}
上面的代码中,先调用MyClass的静态方法Test(),执行结果如下:
MyClass的静态构造函数被执行
MyClass的静态方法被执行
MyClass的构造函数被执行
MyClass的非静态方法被执行
可以看到,按照执行顺序,静态构造函数先于其他方法执行,然后执行静态方法,最后执行非静态方法。
- 示例二
class Program
{
static void Main(string[] args)
{
DerivedClass obj = new DerivedClass();
}
}
class BaseClass
{
static BaseClass()
{
Console.WriteLine("BaseClass的静态构造函数被执行");
}
public BaseClass()
{
Console.WriteLine("BaseClass的构造函数被执行");
}
public virtual void Test()
{
Console.WriteLine("BaseClass的虚拟方法被执行");
}
}
class DerivedClass : BaseClass
{
static DerivedClass()
{
Console.WriteLine("DerivedClass的静态构造函数被执行");
}
public DerivedClass()
{
Console.WriteLine("DerivedClass的构造函数被执行");
}
public override void Test()
{
Console.WriteLine("DerivedClass的重写方法被执行");
}
}
上面的代码中,创建一个派生类的实例,执行结果如下:
BaseClass的静态构造函数被执行
DerivedClass的静态构造函数被执行
BaseClass的构造函数被执行
DerivedClass的构造函数被执行
可以看出,首先执行基类BaseClass的静态构造函数,然后是派生类DerivedClass的静态构造函数,接着执行基类的构造函数,最后是派生类的构造函数。这是因为派生类实例化时,要先实例化基类,然后再实例化派生类。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#类中方法的执行顺序是什么 - Python技术站