C#的类初始化顺序和Java以及C++类初始化顺序是不同的,曾经我被这个问题害惨了。
对于C#和Java,其共同点都是先变量后构造函数,先静态后普通 
区别在于,C#是子类变量->父类变量->父类构造函数->子类构造函数,才轮到构造函数,但是Java的是父类变量->父类构造函数->子类变量->子类构造函数.

using System; 

namespace Test
{
public class A
{ private static Display d1 = new Display("基类静态变量");
private Display d2 = new Display("基类变量");
private static readonly Display d3 = new Display("基类静态readonly常量");
private readonly Display d4 = new Display("基类 readonly常量"); public A()
{
Console.WriteLine("基类 构造函数");
} } class B : A
{
private static Display d1 = new Display("子类静态变量");
private Display d2 = new Display("子类变量");
private static readonly Display d3 = new Display("子类静态readonly常量");
private readonly Display d4 = new Display("子类readonly常量"); public B()
{
Console.WriteLine("子类 构造函数");
} } /// <summary>
/// 用于显示的类
/// </summary>
class Display
{
public Display(string str)
{
Console.WriteLine(str);
}
} class programe
{
static void Main(string[] args)
{
B b = new B(); }
}
}
  1. 子类静态变量
  2. 子类静态readonly常量
  3. 子类变量
  4. 子类readonly常量
  5. 基类静态变量
  6. 基类静态readonly常量
  7. 基类变量
  8. 基类 readonly常量
  9. 基类 构造函数
  10. 子类 构造函数

而对于java呢,源码如下:

package com.vision.paintTest; 

class A { 

    private static Display d1 = new Display("基类静态变量");
private Display d2 = new Display("基类变量");
private static final Display d3 = new Display("基类静态final常量");
private final Display d4 = new Display("基类 final常量"); public A() {
System.out.println("基类 构造函数");
} } class B extends A {
private static Display d1 = new Display("子类静态变量");
private Display d2 = new Display("子类变量");
private static final Display d3 = new Display("子类静态final常量");
private final Display d4 = new Display("子类final常量"); public B() {
System.out.println("子类 构造函数");
} } class Display {
public Display(String str) {
System.out.println(str);
}
} public class Mytest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
} }

  

结果如下:

  1. 基类静态变量
  2. 基类静态final常量
  3. 子类静态变量
  4. 子类静态final常量
  5. 基类变量
  6. 基类 final常量
  7. 基类 构造函数
  8. 子类变量
  9. 子类final常量
  10. 子类 构造函数

C# 类初始化顺序的更多相关文章

  1. java类初始化顺序

    一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void ma ...

  2. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  3. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

  4. 【知识总结】Java类初始化顺序说明

    微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...

  5. Android(java)学习笔记78:Java类初始化顺序

    1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继 ...

  6. 转!!关于java类初始化顺序

    原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...

  7. C++——类继承以及类初始化顺序

    对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...

  8. Java类初始化顺序,大神3个示例带你躺坑。。

    最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量.成员变量.静态代码块.非静态代码块.构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导. 示例 ...

  9. java和C#实例化类初始化顺序

    c# 初始化顺序 子类的静态字段 子类的静态构造方法 子类的实例字段 父类的静态字段 父类的静态构造方法 父类的实例字段 父类的实例构造方法 java 初始化顺序 初始化过程: 1. 初始化父类中的静 ...

随机推荐

  1. 【C++11新特性】 - 空间配置allocator类

    原文链接: http://blog.csdn.net/Xiejingfa/article/details/50955295 今天我们来讲讲C++的allocator类. C++提供了new和delet ...

  2. eventql操作脚本

    a) standalone mode mkdir -p /var/evql/standalone/usr/local/bin/evqld --standalone --datadir /var/evq ...

  3. spark sql 的性能调优

    Caching Data in Memory 其他调优参数

  4. Spring 学习之AOP

    1. 走进面前切面编程 编程范式: 面向过程编程,c语言: 面向对象编程:c++,java,c#; 函数式编程: 事件驱动编程: 面向切面编程: AOP是一种编程范式,不是编程语言:解决特定问题,不能 ...

  5. HTML+CSS实现页面

    使用HTML和CSS实现以下页面: 抽屉首页 个人博客首页 小米官网首页 登录注册页面 一.抽屉首页 1.实现目标:https://dig.chouti.com/ 2.代码: HTML: <!- ...

  6. 〈Android 群英传-神兵利器〉第7章一个的寂寞与一群人的狂欢

    |---第7章一个的寂寞与一群人的狂欢 |---7.1如何解决问题 |---Chrome浏览器 |---Chrome开发者工具 |---Chrome插件(Json-Handle:Json格式化查看工具 ...

  7. 服务器对cookie信息加密

    通过redis的seesion对cookie信息加密  --- 防止cookie记录的用户信息泄露 import tornado.ioloop import tornado.web from data ...

  8. html调用静态json例子

    1.json { "current": 2, "result": "success" } 1.html <!doctype html& ...

  9. Zabbix结合Grafana绘图

    参考网站: https://www.jianshu.com/p/6eec985c5c94 注意事项: 1.在ganafa添加datasource的时候url写成http://10.116.33.116 ...

  10. 24. (ora-01410无效的rowid)临时表 on commit delete rows 与 on commit preserve rows 的区别

    ora-01410无效的rowid解决方式: 把临时表空间改成会话级别的就可以了,即把临时表的创建选项由on commit delete rows改为on commit preserve rows,就 ...