构造函数、static静态构造函数(C#特有)、对象初始化语句(C#特有)

本文主要是介绍构造函数、static静态构造函数(C#特有)、对象初始化语句(C#特有),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        C#中的构造函数与C++中类似,如果希望能从类的外部创建类的实例,需要将构造函数声明为public,如果类的声明中没有显式的提供实例构造函数,那么编译器会提供一个隐式的默认构造函数,它没有参数,方法体为空,如果你为类声明了任何构造函数,那么编译器将不会为该类定义默认构造函数,这时如果不主动声明默认构造函数的话,当在使用不带参数的构造函数创建新的实例时,则会出错。

静态构造函数(C++中不存在,C#中存在,可以初始化静态字段)

构造函数也可以声明为static,实例构造函数初始化类的每个新实例,而static构造函数初始化类级别的项,通常,静态构造函数初始化类的静态字段

静态构造函数与实例构造函数的不同:
(1)静态构造函数声明中使用static关键字
(2)类只能有一个静态构造函数,而且不能带参数
(3)静态构造函数不能有访问修饰符

静态构造函数的使用:
(1)类既可以有静态构造函数也可以有实例构造函数
(2)如同静态方法,静态构造函数不能访问所在类的实例成员,因此也不能使用this访问器
(3)不能从程序中显示调用静态构造函数,系统会自动调用它们在类的任何实例被创建之前、类的任何静态成员被引用之前,例如new个对象的时候,系统会先调用到静态构造函数(在已经定义的情况下),然后在调用默认构造函数

    class Program{static Program(){Console.WriteLine(999);  //先打印}public Program(){Console.WriteLine(100);  //后打印}static void Main(string[] args){Program p = new Program();}}

对象初始化语句(C++中没有)

一般情况下,对象创建表达式由关键字new后面跟着一个类构造函数及其参数列表组成,对象初始化语句扩展了创建语法,在表达式的尾部放置了一组成员初始化语句,这允许在创建新的对象时,设置字段和属性的值。,俩种形式,一种包括构造函数的参数列表,一种不包括。

初始化语句发生在构造方法执行之后,因此在构造方法中设置的值会在之后对象初始化中重置为其他的值

    class Program{public int a = 1;public int b = 2;Program(){a = 11;b = 22;}static void Main(string[] args){Program p = new Program();Program p2 = new Program { a = 10, b = 20 };Console.WriteLine(p.a);  //11Console.WriteLine(p.b);  //22Console.WriteLine(p2.a); //10Console.WriteLine(p2.b); //20}}

在程序中加断点调试可以看到在执行p2的构造过程时,先执行的int a=1; int b=2;然后在执行的Program构造函数,最后在进行的对象初始化语句,相当于a、b被赋值了3次,最后的值才为a=10 b=20

这篇关于构造函数、static静态构造函数(C#特有)、对象初始化语句(C#特有)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/763894

相关文章

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(