(原创)关于构造函数及参数执行顺序说明(c#)

 c#中构造函数,以及变量的执行顺序说明

以前自己对这方面的内容一直比较模糊,只是知道一个大概的顺序,具体确切的执行顺序不能确定,于是抽空做了一个详细的测试,对其进行一番研究.
具体的程序代码比较简单,如下所示.
三个类分开来写的,一个父类,一个子类,一个测试类:
父类:

using System;

namespace TestInherit
{
 /// <summary>
 /// Father 的摘要说明。
 /// </summary>
 public class Father
 {
  public int father_a=111;

  public int father_aa=1111;

  public readonly int father_c=7777;

  public static int father_e=222;

  public static int father_ee;


  static Father()
  {
   
   father_e=5555;
   father_ee=3333;

  }

  public Father()
  {
   father_ee=4444;
  }

  public Father(int a)
  {
   father_a=a;
  }
  
  
 }
}

子类:
using System;

namespace TestInherit
{
 /// <summary>
 /// Sun 的摘要说明。
 /// </summary>
 public class Sun:Father
 {
  
  public int sun_int=9999;

  public static int sun_b=111;

  public static int sun_c;

  public Sun()
  {
   sun_c=222;
   
  }

  static Sun()
  {
   sun_c=333;

  }

  public Sun(int a)
  {
   sun_int=a;
  }

 }
}


测试Class1类

using System;

namespace TestInherit
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
    Sun sun1=new Sun ();


  }
 }
}

然后一路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.静态构造函数,静态参数都是优先于非静态构造函数,非静态参数构造或初始化;

有误之处,欢迎大家指正!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值