时间:2021-05-20
这个很基础的知识,但我至今才意识到它。想想也很失败。
直接上代码:很简单
复制代码 代码如下:
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();
}
所以说它的执行顺序为:子类字段-父类字段-父类构造器-子类构造器
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这里直接给出C#类成员一般初始化顺序:子类静态字段子类静态构造子类实例字段父类静态字段父类静态构造父类实例字段父类实例构造子类实例构造为什么说是“一般”初始化顺
规则1(无继承情况下):对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器证明代码
前言我们知道,在调用构造函数时,C#会先对类中的字段、属性进行初始化操作。那么,问题来了,为什么在调用构造函数前会初始化类中的字段和属性呢?让我们一起通过ild
在继承关系中,静态初始化、非静态初始化和构造函数的执行顺序publicclassExA{static{System.out.println("父类--静态代码块
C#变量初始化是C#强调安全性的另一个例子。简单地说,C#编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量。大多数现代编译器把没有初始化标记为