<1>
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 构造函数的执行顺序 { public class MyBaseClass { public MyBaseClass() { Console.Write("调用父类无参数的构造函数"); } public MyBaseClass(int i) { 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) { age = 102; Console.WriteLine(age); } public MyDerivedClass(int i, int j) { Console.WriteLine("两个变量的参数"); } } class Program { static void Main(string[] args) { MyDerivedClass myder = new MyDerivedClass(); //输出100 ,"调用父类无参数的构造函数",101 //执行顺序:<1>: static MyDerivedClass() <2>: public MyBaseClass() <3>:public MyDerivedClass() //--------------------------------------------------------------------------------------------- MyDerivedClass myder2 = new MyDerivedClass(5); //输出"调用父类无参数的构造函数",102。 //在初始化myder对象的时候已经初始化过静态变量age2了。因为静态构造函数最多执行一次,所以初始化myder2对象的时候就不会在继续初始化静态变量age2了 //执行顺序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i) //假如我想在初始化myder2对象的时候调用父类带有一个参数的构造函数怎么办呢?很好办只要在派生类的构造函数后面加一个:base(i) /* base 关键字用于从派生类中访问基类的成员;指定创建派生类实例时应调用的基类构造函数。 public MyDerivedClass(int i):base(i) { age = 102; Console.WriteLine(age); } 执行顺序:<1>: public MyBaseClass(int i) <2>: public MyDerivedClass(int i) 顾这里输出的是 "调用父类一个参数的构造函数",102 */ //--------------------------------------------------------------------------------------------- MyDerivedClass myder3 = new MyDerivedClass(5, 6); //输出"调用父类无参数的构造函数","两个变量的参数" //执行顺序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j) Console.ReadKey(); } } }
<2>
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); } public MyDerivedClass(int i, int j) { Console.WriteLine("两个变量的参数"); } } 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() //--------------------------------------------------------------------------------------------- //MyDerivedClass myder2 = new MyDerivedClass(5); //输出"调用父类无参数的构造函数",102。 //在初始化myder对象的时候已经初始化过静态变量age2了。因为静态构造函数最多执行一次,所以初始化myder2对象的时候就不会在继续初始化静态变量age2了 //执行顺序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i) //假如我想在初始化myder2对象的时候调用父类带有一个参数的构造函数怎么办呢?很好办只要在派生类的构造-+函数后面加一个:base(i) /* base 关键字用于从派生类中访问基类的成员;指定创建派生类实例时应调用的基类构造函数。 public MyDerivedClass(int i):base(i) { age = 102; Console.WriteLine(age); } 执行顺序:<1>: public MyBaseClass(int i) <2>: public MyDerivedClass(int i) 顾这里输出的是 "调用父类一个参数的构造函数",102 */ //--------------------------------------------------------------------------------------------- //MyDerivedClass myder3 = new MyDerivedClass(5, 6); //输出"调用父类无参数的构造函数","两个变量的参数" //执行顺序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j) Console.ReadKey(); } } }
时间: 2024-10-23 06:43:57