首先进行细分
1.类的成员分为:字段,属性,方法,构造函数

2.成员修饰符:静态成员,实例成员

不考虑继承的关系执行顺序为
1.静态字段
2.静态构造方法
3.实例字段
4.实例构造方法
其中 属性和方法只有在调用的时候才执行。
下面是一段代码例子

定义了一个类,当我们实例化的时候
Test test = new Test();
通过VS2008仿真 执行过程是
0. 静态的最先执行,仿真编译略过
1. F11 执行 public int mNum2=2; //简单的初始化字段
2. private int mNum3 = 3;
private int mNum4 = 4;
3. public Test() { temp = 1;mNum = 0; } //构造函数

以上是执行的顺序:与上面描述的的执行过程稳和,属性和字段跳过。public int mNum;也执行了,只不过系统默认赋值为空(null)或者0,系统西东除了的仿真时候跳过。
      class Test{public static int temp;public int mNum;public int mNum2=2;public void look(){Console.WriteLine("看我,我是test");Console.WriteLine("mNum={0}", mNum);}private int mNum3 = 3;private int mNum4 = 4;public int Num3{get { return mNum3; }set { mNum3= value; }}public  Test(){temp = 1;mNum = 0;}}

当存在继承关系的时候,执行的顺序。
1. 子类的静态字段
2. 子类的静态构造方法
3. 子类的实例字段
4. 父类的静态字段
5. 父类的静态构造方法
6. 父类的实例字段
7. 父类的实例构造方法
8. 子类的实例构造方法
下面是例子

1.  首先执行 class A中 int x = 1;,执行所有已经初始化后的字段,当执行到构造函数首执行父类字段
2.    int sd = 6;
3.    public A(),首先会去执行父类。
4.    0.    静态的最先执行,仿真编译略过1.    F11 执行 public int mNum2=2; //简单的初始化字段2.    private int mNum3 = 3;private int mNum4 = 4;3.    public  Test()  { temp = 1;mNum = 0; }   //构造函数
5.    public A(){PrintFields();look();}// 执行子类中自己的构造函数
6.     public virtual void PrintFields() ;执行自己类中有意义的虚函数
7.   执行调用父类的函数 look();
8.   接下来就将要执行 class B 中的内容了。过程类似,先一步一步的执行A类,在执行Test类,实现继承。
9.  忽略部分细节,降调B类中的细节。int z=2;public B() 运行到这里的时候,再次执行到  public A(){PrintFields();look();}的构造函数的时候,由于执行的是实例化B类,又在B类中重写了PrintFields();,实现多态。所以执行  public override void PrintFields(){Console.WriteLine("x={0},y={1}", "b", z);}所以此时的 z=2;而不是   public B(){z = -1;}中的z=-1,因为还没有执行到它,随后才执行子类中的构造函数。

10. 接下来是执行C类的实例化,C类中没有写C的构造函数,但是还是执行到了
B类(它的父类)中int z=2;,是因为,默认给写了无参的C类构造函数。
相当与 public C(){}
11. 所以任然能够继承,执行 public override void PrintFields()
{
Console.WriteLine(“j={0},k={1}”, “CC”, y);
}

 class A :Test{int x = 1;public A(){PrintFields();look();}int c;int sd = 6;public virtual void PrintFields() {Console.WriteLine("j={0},k={1}", "AA", "AA");}}class B : A{int y;int z=2;public B(){z = -1;}public override void PrintFields(){Console.WriteLine("x={0},y={1}", "b", z);}}class C : B{int x = 1;int y = 3;public override void PrintFields(){Console.WriteLine("j={0},k={1}", "CC", y);}}
  static void Main(string[] args){Test test = new Test();A a = new A();B b = new B();C c = new C();Console.ReadKey();}

补充说明

  1. 并不是每次实例化都是上面的顺序。因为静态的成员只是在第一次实例化的时候执行,以后再实例化都不会在执行。静态的成员意味着大家共享,且只有这一个。第一次实例化得到静态成员后,以后大家都共享,再次实例化,没有必要也不允许执行静态成员的部分。
  2. 在类中如果不添加访问修饰符,默认是静态的
  3. 非静态的字段,属性,方法,不能够作为右值。
  4. 构造引用类型的对象时,调用实例构造方法之前,为对象分配的内存总是先被归零,构造器没有显式重写字段,字段的值为0或者null,例如class Test 中的
    public int mNum;mNum 默认为0
  5. C#编译器提供了简化语法,允许在变量定义的时候就进行初始化(C++应该不行,在构 造函数汇总)但是存在了代码膨胀的问题。多个字段在定义时初始化,同时存在多个构造方法,每个构造方法都会把这些字段初始化的代码搬到自己的内部,这样造成代码的膨胀。
  6. 为了避免这样情况,可以把这些字段的初始化放到一个无参构造方法内,其他的构造方法显式调用无参构造方法。
  7. 初始化字段的两种方法
    ①使用简化语法:在定义的时候初始化
    ② 在构造方法内初始化。

效果图

C# 实例化的执行顺序相关推荐

  1. Java继承关系的类的初始化和实例化的执行顺序

    2019独角兽企业重金招聘Python工程师标准>>> 首先我们定义一个接口,如下: public interface People {String interfaceName = ...

  2. python实例化类执行顺序_Python实例化class的执行顺序

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. python类中方法的执行顺序-Python中实例化class的执行顺序示例详解

    前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...

  4. python类中方法的执行顺序-Python实例化class的执行顺序实例方法

    Python中实例化class的执行顺序示例详解 前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的 ...

  5. python实例化是什么意思_Python中实例化class的执行顺序示例详解

    前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...

  6. pythonclass实例化_Python中实例化class的执行顺序示例详解

    原博文 2020-01-12 22:04 − 前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 ...

  7. java先执行static还是构造函数_【Java基础】类的实例化、static、父类构造函数执行顺序...

    重温java基础,以免自己以后犯原则性错误,这是最基本,最基础的东西. 先看结论: 一个类的实例化过程: 1,首先会执行类中static代码块(不管代码块是否在类的开头还是末尾处),如果这个类有父类, ...

  8. Java实例化后自动执行_Java的实例化顺序(程序执行顺序)

    加载/执行顺序: 牢记一点: 静态和非静态分开处理 使用到静态加载时,静态又分为: 静态变量, 静态代码块, 其中加载顺序是按照类中书写的先后顺序加载的 非静态加载顺序: 按照非静态书写顺序加载/执行 ...

  9. java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题

    2019独角兽企业重金招聘Python工程师标准>>> /* * 几大原则 * 一.静态成员变量(Static) * 1.静态成员变量为类变量,所有对象共享同一内存空间 * 2.静态 ...

最新文章

  1. WordPress数据库优化技巧
  2. key mysql_mysql中key 、primary key 、unique key 与index区别
  3. 图解c/c++多级指针与“多维”数组
  4. 在Android Studio中搜索整个项目中所有出现的字符串
  5. WinPhone 开发(1)-----在 XAML 页面之间浏览和数据的传递、保留以及恢复
  6. MyBatis的入门知识
  7. 第二阶段个人博客总结8
  8. Centos安装NFS服务器配置及挂载教程
  9. 【英语学习】【WOTD】yen 释义/词源/示例
  10. 报送数据标准校验java_Java:数据校验 - osc_gaqp1a2z的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. 富文本框让最大四百像素_富文本框的使用
  12. 感谢大家对《软件性能测试与Loadrunner实战》的支持
  13. 机器学习入门——图解集成学习(附代码)
  14. ceph存储修改vm密钥(密码)
  15. python统计分析-卡方分析和方差分析
  16. C#模拟union接收
  17. 如何快速删除CSV、Excel、Markdown表格的重复行?
  18. 通讯录的思路与实现(C语言)
  19. C1. Simple Polygon Embedding(几何)
  20. 华硕rt-ac85p更换新驱动(一)

热门文章

  1. ssr cmd 窗口代理设置
  2. 微信小程序网络连接失败
  3. 中职学校计算机专业宣传口号,中职学校宣传标语
  4. 直播造星3年:除了冯提莫 你还记得几个出圈的网红?
  5. 某腾LOL开发负责人教你如何用Java实现一把 LOL 案例,学会模板设计模式!
  6. 【Redis我可以讲一个小时】
  7. C语言中三元运算符的嵌套细节说明
  8. Python快速实现黄图检测——车速检测器
  9. Resume In English
  10. 7.0安苏服务器稳定吗,魔兽世界8.0:安苏大区天天爆炸,网易能把逆水寒服务器还回来吗?...