构造函数可以分为静态构造函数跟构造函数,也可以分为有参数跟无参数这两类
静态构造函数只执行一次,前面用static来修饰,不能用访问修饰符来修饰,具体调用一般由.NET来控制,调用发生在类实例化以及静态成员的调用时,
构造函数则发生在new()中,这么说可能不是很确切,如果存在继承的关系
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 构造函数的执行顺序
{
public class MyBaseClass
{
public MyBaseClass()
{
Console.Write("调用父类无参数的构造函数");
}
public MyBaseClass(int x)
{
Console.Write("调用父类一个参数的构造函数");
}
}
public class MyDerivedClass : MyBaseClass
{
public int age;
public static int age2;//只要类里存在静态变量。那么静态变量总是最先初始化的。
static MyDerivedClass() //既然要初始化静态变量,就要调用静态的构造函数。
{
age2 = 100;
Console.Write(age2);
}
public MyDerivedClass():this(5)
{
age = 101;
Console.WriteLine(age);
}
public MyDerivedClass(int i):base(i)
{
age = 102;
Console.WriteLine(age);
}
}
class Program
{
static void Main(string[] args)
{
MyDerivedClass myder = new MyDerivedClass(); //输出100 ,"调用父类一个参数的构造函数",102,101
/*
执行顺序:
<1>:static MyDerivedClass()
<2>:public MyBaseClass(int x)
<3>:public MyDerivedClass(int i)
<4>:public MyDerivedClass()
public MyDerivedClass():this(5) 这个this(5),就表示在调用public MyDerivedClass()构造函数前,先调用当
前类中带一个参数的构造函数,即先调用public MyDerivedClass(int i) ,而MyDerivedClass类中存在一个静态变量,
静态变量肯定是最先被初始化的,所以最先被调用的就是静态构造函数 static MyDerivedClass()。
Console.ReadKey();
}
}
}