C# 之静态构造器与静态字段初始化器
public class Test
{
/// <summary>
/// 静态字段初始化器会在调用静态构造器前运行。
/// 如果类型没有静态构造器,字段会在类型被使用前或运行时中更早的时间进行初始化.
/// 静态字段初始化器按照字段声明的先后顺序运行。
/// </summary>
public static int X = Y;//静态字段初始化器
public static int Y = 3;//静态字段初始化器
public static int Z = 6;//静态字段初始化器
public static int ZX = Z;//静态字段初始化器
/// <summary>
/// 静态构造器,一个类型只能定义一个静态构造器,名称必须和类名相同,且没有参数。
/// 运行时将在类型使用之前调用静态构造器,以下两种行为可以触发静态构造器执行:
/// ·实例化类型
/// ·访问类型的静态成员
/// </summary>
static Test()
{
Console.WriteLine("Test Type Initialized");
}
public Test()
{
Console.WriteLine("This is Initalize function");
}
}
class ProgramA
{
static void Main()
{
Test t = new Test();
Console.WriteLine("X is "+Test.X);
Console.ReadLine();
}
}
OUTPUT:
Test Type Initialized
This is Initalize function
X is 0
输出结果正证实了:静态构造器只会执行一次。
class ProgramA
{
static void Main()
{
Console.WriteLine("Z is " + Test.Z);
Console.WriteLine("ZX is "+Test.ZX);
Console.ReadLine();
}
}
output:
Test Type Initialized
Z is 6
ZX is 6
输出结果正证实了:静态字段初始化器是按照顺序进行的。
class Foo
{
/// <summary>
/// 静态字段初始化器按照声明顺序运行
/// </summary>
public static Foo Instance = new Foo();
public static int X = 3;
Foo()
{
Console.WriteLine(X);
}
}
class ProgramA
{
static void Main()
{
//静态字段初始化器在类型使用前就运行,所以首先是运行Instance,
//而Instance正好调用了实例构造函数,而实例构造函数打印X,而此时,
//X还没有赋值,所以打印出0,而后,才初始化X为3,再在Main()函数中打印出X,即3
Console.WriteLine(Foo.X);
Console.ReadLine();
}
}
output:
0
3
C# 之静态构造器与静态字段初始化器的更多相关文章
- java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数
一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构
- 6 CLR静态构造器
CLR保证一个类型构造器在每个AppDomain中只执行一次,而且这种执行是线程安全的. 作用: 就是初始化静态成员 比如有几个静态成员需要初始化那你把初始化代码放到哪呢? 放到普通构造函数里,那肯定 ...
- Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)
1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...
- 静态构造器(static constructor)
1.定义: 静态构造函数是实现对一个类进行初始化的方法成员. 它一般用于对静态数据的初始化. 静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用. 2.特点: ...
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- 非静态代码块(非static初始化块)&静态代码块(static初始化块)
非静态代码块: TestOrder: package com.aff.singleton; /* 类的第四个成员:初始化块(代码块) 代码块: 如果有修饰的话只能使用static 分类:非静态代码块: ...
- EffectiveJava(1) 构造器和静态工厂方法
构造器和静态工厂方法 **构造器是大家创建类时的构造方法,即使不显式声明,它也会在类内部隐式声明,使我们可以通过类名New一个实例. 静态方法是构造器的另一种表现形式** 主题要点:何时以及如何创建对 ...
- c#基础3-方法的重载静态和非静态,字段属性,方法
方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方 ...
- 【Spring】Spring中的Bean - 2、Baen的实例化 (构造器、静态工厂、实例工厂)
Bean的实例化 文章目录 Bean的实例化 构造器实例化 静态工厂方式实例化 实例工厂方式实例化 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-S ...
- C#基础知识之静态和非静态
项目中静态和非静态常被用到,什么时候需要用静态的,什么时候需要使用非静态,以及他们的区别是什么? 一.概述 静态和非静态的不同地方,就是静态从程序一启动就会一直占用内存,而非静态只有在实例化的时候才会 ...
随机推荐
- 启动hive,报错 Name node is in safe mode.
在学习过程中,过了几天再启动虚拟机,启动hadoop后再启动别的框架会报错: Exception in thread "main" java.lang.RuntimeExcepti ...
- .net core 非阻塞的异步编程 及 线程调度过程
本文主要分为三个部分: 1.语法格式 2.线程调度情况 3.编程注意事项 4.练一练 * 阅读提示 :鼠标悬停在 章节标题 上可见 文章目录 异步编程(Task Asynchronous Progra ...
- 【检索类型EI、Scopus】第二届智能计算与数据分析国际学术会议(ICDA 2025)
为探讨数据科学和计算智能领域的关键问题,促进相关交流,由黄河科技学院主办的2025年第二届智能计算与数据分析国际学术会议(ICDA 2025)将于2025年8月22日-24日在中国郑州召开.本届会议拟 ...
- 【ABAQUS 二次开发笔记】使用keyword 、python和matlab一起处理Odb数据
用conversion shell element (S4R单元)建模层合板,有6层ply,每个lamina(ply)有3个 integration point,共计18个integration po ...
- GIT 基础操作-初始化
命令行说明 全局设置 git config --global user.name "" git config --global user.email "" 创建 ...
- Golang windows下 交叉编译
前言 在进行Go开发的时候,go env 可以设置Go的环境变量信息 GOOS 的默认值是我们当前的操作系统, 如果 windows,linux,注意 mac os 操作的上的值是darwin. GO ...
- VS 2022 WEB发布编译失败
VS2022当安装在非默认路径时,每次更新后,在发布时,就会出来编译失败的提示,比如这样: C:\VS2022\Preview\MSBuild\Microsoft\VisualStudio\v17.0 ...
- 如何让低于1B参数的小型语言模型实现 100% 的准确率
如何让低于1B参数的小型语言模型实现 100% 的准确率 上下文学习被低估了--ICL 是提升性能的秘密钥匙--教会 AI 说"我不知道"--第 2 部分 Fabio Matric ...
- leetcode每日一题:k-avoiding 数组的最小总和
引言 今天是本次开始坚持leetcode每日1题的第10天,也算是迈出了一小步. 题目 2829. k-avoiding 数组的最小总和 给你两个整数 n 和 k . 对于一个由 不同 正整数组成 ...
- 深度讲解-APP安全评估报告(APP上架必备)
随着<具有舆论属性或社会动员能力的互联网信息服务安全评估规定>(以下简称<评估规定>)的发布,互联网信息服务提供者在开展具有舆论属性或社会动员能力的App服务时,必须遵循相应的 ...