构造函数及参数执行顺序说明

具体的程序代码比较简单,如下所示.
三个类分开来写的,一个父类,一个子类,一个测试类:
父类:
Code
子类:
Code
测试Class1类
Code
然后一路F11,进行跟踪,可以得到完整的执行顺序如下所示:
1.子类静态变量;
2.子类静态构造函数;
3.子类非静态变量;
4.父类静态变量;
5.父类静态构造函数;
6.父类非静态变量;
7.父类无参构造函数;
8.子类无参构造函数;

如果Main()方法中改为Sun sun1=new Sun (111),顺序为;
1.子类静态变量;
2.子类静态构造函数;
3.子类非静态变量;
4.父类静态变量;
5.父类静态构造函数;
6.父类非静态变量;
7.父类无参构造函数;
8.子类有参构造函数;


如果子类的有参构造函数改为:
public Sun(int a):base(a)
{
sun_int=a;
}
则顺序又有所改变:

1.子类静态变量;
2.子类静态构造函数;
3.子类非静态变量;
4.父类静态变量;
5.父类静态构造函数;
6.父类非静态变量;
7.父类有参构造函数;
8.子类有参构造函数;

以上测试改为父类声明,子类实现,结果也是一样,即mian()方法中改为Father sun1=new Sun ();

最后作一个总结:
1.一般原理是被依赖的先构造,依赖于人的后构造,c#中是同层依赖(成员变量,其他的类变量等)优先于跨层依赖(父子关系)构造(注意java中正好相反); (子类的变量是不是可以理解为同层的依赖呢??)
2.静态构造函数,静态参数都是优先于非静态构造函数,非静态参数构造或初始化。

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

泛型集合类型,赋予集合业务意义,增强集合的抽象使用  如何把图片插入Excel的一个单元格中
在C#下用MicrosoftAgent创建超酷语言精灵  C#,程序员的新工具
使应用程序只能运行单个实例  .Net的精髓-XML和SOAP(三)
C#InnerClassvs.java的innerclass比较  使用设计模式构建通用数据库访问类
CLR特写  用VisualC#做DLL文件(2)
MySQL 5 C# sample code using ObjectDataSources  在VisualC#中访问不同数据库(1)
VisualC#编写实现POP3的程序  C#实现Eval函数功能
在C#中利用SharpZipLib进行文件的压缩和解压缩  从WindowsDNA到.NET(3)
C#实现笔记本上网设置的切换(附代码)  VisualStudio.Net内幕(8)
在用c#开发的ActiveX中调用JavaScript方法  在VisualC#中访问不同数据库(3)