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. win10安装.net framework3.5

    win10默认没有安装.net framework3.5,一般方法需提取Windows安装镜像,麻烦. 离线安装方法如下: cab格式.NET Framework 3.5离线安装包下载地址:百度网盘 ...

  2. 学习MongoDB 二:MongoDB添加、删除、修改

    一.简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种.数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB ...

  3. cecium 笔记

    1.Build文件夹 整个拷贝到public文件下,便可使用 2.BingMap(必应地图) Key申请之后,到Build/Cecium/Cecium.js更改默认Key, i.defaultKey ...

  4. 39. 在linux下装好Tomcat要给 tomcat/bin/下面所有.sh的文件执行权限

    chmod a+x *.sh(赋予可执行的权限)

  5. Yii2 基础学习

    <?php //url创建 echo Url::to(''); // same controller, different action // /index.php?r=management/d ...

  6. ABAP-Generate subroutine

    1.定义 data:zprog like abapsource occurs with header line, prog() type c, msg() type c. 2.动态语句 zprog-l ...

  7. Haskell语言学习笔记(52)正则表达式

    Text.Regex.PCRE.Heavy $ brew install pcre $ cabal install pcre-heavy Installed pcre-heavy-1.0.0.2 Pr ...

  8. one by one 项目 part 4

    出现异常”The last packet sent successfully to the server was 0 milliseconds ago.“的大部分原因是由于数据库回收了连接,而系统的缓 ...

  9. Nunit与Vs 2012配合使用

    要使用Nunit首先要去官网 http://www.nunit.org/ 下载Nunit.win  .msi是安装版.   bin  .zip是绿色版. 下载完后安装. 在 VS2012 中使用 Nu ...

  10. Pandas缺失数据处理

    Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...