博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 类初始化顺序
阅读量:5149 次
发布时间:2019-06-13

本文共 2367 字,大约阅读时间需要 7 分钟。

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("子类 构造函数");         }       }      ///      /// 用于显示的类     ///      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. 子类 构造函数 

转载于:https://www.cnblogs.com/x-poior/p/5028374.html

你可能感兴趣的文章
java.util.properties
查看>>
Maven系列--"maven-compiler-plugin"的使用
查看>>
jquery表单验证
查看>>
android官方手册学习笔记
查看>>
iOS 同一个View识别单击和双击手势
查看>>
Linux 中权限控制实例
查看>>
js数组之迭代器方法
查看>>
创智天地半日游
查看>>
FZU 2122 又见LKity【字符串/正难则反/KMP/把一个字符串中某个部分替换为另一个部分】...
查看>>
UVA 11388 - GCD LCM
查看>>
用Gvim建立IDE编程环境(window linux 同样适用)
查看>>
MongoDB 创建索引及其他
查看>>
ifconfig 工具
查看>>
PI上导入RFC
查看>>
IOS键盘收起
查看>>
spring 3 简单笔记(一)
查看>>
配置保存 序列化
查看>>
springboot和ssm的区别
查看>>
python学习——读取染色体长度(六:读取含有染色体长度的文件)
查看>>
51nod1835 完全图
查看>>