c#构造初始化的顺序浅析
发布时间:2022-10-13 22:14:34
这个很基础的知识,但我至今才意识到它。想想也很失败。
直接上代码:很简单
public class Base
{
int i=0;
public Base()
{
System.Console.WriteLine("我是基类构造器");
}
}
class Program
{
static void Main(string[] args)
{
Base d = new Base();
}
}
对于上面的代码。是先执行构造器,还是先初使化字段 i 变量呢?其实只要意识到这个问题,也就很容易试出来,它应当是先初使化字段 i 变量。
那么现在如果Base 派生出一个子类,那它的构造顺序又是怎么样的呢?
/// <summary>
/// 基类
/// </summary>
public class Base
{
public int baseint = 100;
public Base()
{
System.Console.WriteLine("构造器:我是基类构造器");
}
private class Inner
{
public Inner()
{
System.Console.WriteLine("字段:我是基类Inner");
}
}
/// <summary>
/// 字段初使化
/// </summary>
private Inner inner = new Inner();
}
/// <summary>
/// 子类
/// </summary>
class Derived : Base
{
public Derived()
{
System.Console.WriteLine("构造器:我是子类构造器");
}
private class Inner
{
public Inner()
{
System.Console.WriteLine("字段:我是子类Inner");
}
}
/// <summary>
/// 字段初使化
/// </summary>
private Inner inner = new Inner();
}
所以说它的执行顺序为:子类字段-父类字段-父类构造器-子类构造器


猜你喜欢
- 一个很常用的功能,一个ViewPager会自动滚动,并且有一排小圆点黑和白来指示当前的滚动进度首先写一个ViewPager的适配器,这里这个
- 呼吸按钮是我最早接触到为view添加动画效果的需求,刚刚参加安卓开发工作,要求设计一个好看的语音按钮效果,就有了这个成果,但是后来又改方案了
- Spring中Profile对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。文件名格式:application-
- mybatis #{}无法自动添加引号传入string类型时,无法自动添加引号,导致SQL将值识别为列名,导致SQL失败解决使用map类型代
- 目录一、所使用的环境配置:二、项目简介三、知识点总结(代码和配置)SpringBoot:1.Mybatis-Plus配置文件,实现分页查询:
- 1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap spaceJVM在启动的时候会自
- 本文实例讲述了Java判断两个日期相差天数的方法。分享给大家供大家参考。具体如下:import java.util.Calendar;pub
- 前言目前互联网公司,大部分项目都是基于分布式,一个项目被拆分成几个小项目,这些小项目会分别部署在不同的计算机上面,这个叫做微服务。当一台计算
- 什么是建造者模式建造者模式( Builder Pattern )是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以
- 域对象共享数据使用ServletAPI向request域对象共享数据@RequestMapping("/testServletAP
- java计算对数和指数public static void main(String[] args) throws InterruptedEx
- 不废话了,直接给大家贴代码了。class term { String str; int id; &
- SharedPreferences在开发过程中,数据存取是较为频繁的,今天我们来了解下android几种常见的数据存取方式。在Android
- 一、结构型模式结构型模式有什么好处?从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题二、适配器模式USB网线转换器三、
- 本文实例讲述了Android Dialog对话框用法。分享给大家供大家参考,具体如下:Activities提供了一种方便管理的创建、保存、回
- 一. Thread.yield( )方法:使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说
- 新建一个表:create table abc(id int IDENTITY(1,1) NOT NULL,name nvarchar(100
- protected 来谈谈protected访问权限问题。看下面示例1:Test.javaclass MyObject {}public c
- maven-compiler-plugin编译Java源码,一般只需设置编译的jdk版本<plugin> <g
- 前言在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小