windows C#-构造函数

news/2024/12/24 0:27:45/

每当创建类或结构的实例时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,程序员能够设置默认值、限制实例化,并编写灵活易读的代码。 

有多个操作在初始化新实例时进行。 这些操作按以下顺序执行:

  • 实例字段设置为 0。 这通常由运行时来完成;
  • 字段初始值设定项运行。 派生程度最高类型的字段初始值设定项运行;
  • 基类型字段初始值设定项运行。 以直接基开头从每个基类型到 System.Object 的字段初始值设定项;
  • 基实例构造函数运行。 以 Object.Object 开头从每个基类到直接基类的任何实例构造函数;
  • 实例构造函数运行。 该类型的实例构造函数运行;
  • 对象初始值设定项运行。 如果表达式包含任何对象初始值设定项,后者会在实例构造函数运行后运行。 对象初始值设定项按文本顺序运行;

初始化新实例时,将执行上述操作。 如果 struct 的新实例设置为其 default 值,则所有实例字段都设置为 0。

如果静态构造函数尚未运行,静态构造函数会在任何实例构造函数操作执行之前运行。

构造函数语法

构造函数是一种方法,其名称与其类型的名称相同。 其方法签名仅包含可选访问修饰符、方法名称和其参数列表;它不包含返回类型。 以下示例演示一个名为 Person 的类的构造函数。

public class Person
{private string last;private string first;public Person(string lastName, string firstName){last = lastName;first = firstName;}// Remaining implementation of Person class.
}

如果某个构造函数可以作为单个语句实现,则可以使用表达式主体定义。 以下示例定义 Location 类,其构造函数具有一个名为“name”的字符串参数。 表达式主体定义给 locationName 字段分配参数。

public class Location
{private string locationName;public Location(string name) => Name = name;public string Name{get => locationName;set => locationName = value;}
}
静态构造函数

前面的示例具有所有已展示的实例构造函数,这些构造函数创建一个新对象。 类或结构也可以具有静态构造函数,该静态构造函数初始化类型的静态成员。 静态构造函数是无参数构造函数。 如果未提供静态构造函数来初始化静态字段,C# 编译器会将静态字段初始化为其默认值,如 C# 类型的默认值中所列。

以下示例使用静态构造函数来初始化静态字段。

public class Adult : Person
{private static int minimumAge;public Adult(string lastName, string firstName) : base(lastName, firstName){ }static Adult(){minimumAge = 18;}// Remaining implementation of Adult class.
}

也可以通过表达式主体定义来定义静态构造函数,如以下示例所示。

public class Child : Person
{private static int maximumAge;public Child(string lastName, string firstName) : base(lastName, firstName){ }static Child() => maximumAge = 18;// Remaining implementation of Child class.
}

http://www.ppmy.cn/news/1557595.html

相关文章

Neo4j 图数据库安装与操作指南(以mac为例)

目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew(可选) 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …

详细ECharts图例1

异步加载饼图 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <script srcjs/echarts.js></script> <script src"js/jquery-3.3.1.js"></script> <title>异步数据加载并绘制饼图</title…

android RadioButton + ViewPager+fragment

RadioGroup viewpage fragment 组合显示导航栏 1、首先主界面的布局控件就是RadioGroup viewpage <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…

React 组件中 State 的定义、使用及正确更新方式

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;React篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容React 组件中 State 的定义、使用及正确更新方式 前言 在 React 应用开发中&#xff0c;state …

uniapp中的uni-file-picker组件上传多张图片到服务器

由于在uniapp官方文档中的uni-file-picker组件可实现图片上传功能&#xff0c;默认的是上传到自带的服务&#xff0c;所以我们要修改成自己的服务器 1. 添加 :auto-upload"false" 加上这个取消自动上传 <uni-file-picker v-model"jobAddUpdateForm.imag…

使用Node.js搭配express框架快速构建后端业务接口模块Demo

使用Node.js搭配express框架快速构建后端业务接口模块Demo&#xff01;实际开发中&#xff0c;有很多项目&#xff0c;其实都是可以使用node.js来完成对接mysql数据库的&#xff0c;express确实使用起来非常简单&#xff0c;入手快&#xff0c;效率非常高。下面是一个简单的案例…

数据可视化-4. 漏斗图

目录 1. 漏斗图适用场景分析 1.1 业务流程分析 1.2 营销活动分析 1.3 客户生命周期管理 2. 漏斗图局限性 2.1 数据量限制 2.2 信息丢失 2.3 静态展示 2.4 过于简化 2.5 转化窗口期的影响 2.6 用户细分限制 3. 漏斗图代码实现 3.1 Python 代码实现 3.2 漏斗图效果…