C# 类初始化顺序
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(); }
}
}
- 子类静态变量
- 子类静态readonly常量
- 子类变量
- 子类readonly常量
- 基类静态变量
- 基类静态readonly常量
- 基类变量
- 基类 readonly常量
- 基类 构造函数
- 子类 构造函数
而对于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();
}
}
结果如下:
- 基类静态变量
- 基类静态final常量
- 子类静态变量
- 子类静态final常量
- 基类变量
- 基类 final常量
- 基类 构造函数
- 子类变量
- 子类final常量
- 子类 构造函数
C# 类初始化顺序的更多相关文章
- java类初始化顺序
一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void ma ...
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...
- Android(java)学习笔记136:Java类初始化顺序
Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化( ...
- 【知识总结】Java类初始化顺序说明
微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...
- Android(java)学习笔记78:Java类初始化顺序
1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继 ...
- 转!!关于java类初始化顺序
原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...
- C++——类继承以及类初始化顺序
对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...
- Java类初始化顺序,大神3个示例带你躺坑。。
最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量.成员变量.静态代码块.非静态代码块.构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导. 示例 ...
- java和C#实例化类初始化顺序
c# 初始化顺序 子类的静态字段 子类的静态构造方法 子类的实例字段 父类的静态字段 父类的静态构造方法 父类的实例字段 父类的实例构造方法 java 初始化顺序 初始化过程: 1. 初始化父类中的静 ...
随机推荐
- 红帽配置Centos仓库[红帽Redhat7替换Centos7网络源]
1.卸载红帽yum源 rpm -e $(rpm -qa|grep yum) --nodeps 2.删除所有repo相关文件 rm -rf /etc/yum.conf rm -rf /etc/yum.r ...
- 0_Simple__simpleCubemapTexture
立方体纹理贴图 ▶ 源代码.用纹理方法把元素按原顺序从 CUDA3D 数组中取出来,求个相反数放入全局内存,输出. #include <stdio.h> #include "cu ...
- 0_Simple__simpleCooperativeGroups
▶ 协作组,CUDA9.0 的新特性 ▶ 源代码,如何获得协作组的编号? #include <stdio.h> #include "cuda_runtime.h" #i ...
- 获取ASPxGridView 中的数据(仅仅是获取;注意模板是如何获取的)
1.取得控件值 using System.Collections.Generic; //取得当前控件值的集合 直接寻找控件的ID List<object> keyValues = this ...
- Android 照相
XE6 控件太强了CameraComponent就可以了 CameraComponent1.Active := True; procedure TCameraComponentForm.CameraC ...
- Window Mysql 5.7.18安装
1:下载地址 https://dev.mysql.com/downloads/mysql/ 点击Community , 然后点击Community Server 位置, 下载 安装包 2: 配置环境变 ...
- ABAP-Generate dynpro动态屏幕
1.获取屏幕参数值 FUN: RS_SCRP_GET_SCREEN_INFOS call function 'RS_SCRP_GET_SCREEN_INFOS' exporting dynnr = ' ...
- UI5-文档-4.27-Mock Server Configuration
我们只是在一个真实的服务上运行我们的应用程序,但是对于开发和测试我们的应用程序,我们不希望依赖于“真实”服务的可用性,或者在数据服务所在的系统上增加额外的负载. 这个系统就是所谓的后端系统,我们现在将 ...
- 使用sqldeveloper连接服务器端数据库
- iOS 真机调试 Xcode 显示 device Error: device unavailable
一般来说有两个原因: 1. iphone没有加到test device里,将iphone的设备id加到test device列表里 2. Xcode不支持当前的iOS版本,将Xcode升级到最新版