构造函数、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#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹