当前位置: 首页 > news >正文

windows C#-使用构造函数

实例化类或结构时,将会调用其构造函数。 构造函数与该类或结构具有相同名称,并且通常初始化新对象的数据成员。

在下面的示例中,通过使用简单构造函数定义了一个名为 Taxi 的类。 然后使用 new 运算符对该类进行实例化。 在为新对象分配内存之后,new 运算符立即调用 Taxi 构造函数。

public class Taxi
{public bool IsInitialized;public Taxi(){IsInitialized = true;}
}class TestTaxi
{static void Main(){Taxi t = new Taxi();Console.WriteLine(t.IsInitialized);}
}

不带任何参数的构造函数称为“无参数构造函数”。 每当使用 new 运算符实例化对象且不为 new 提供任何参数时,会调用无参数构造函数。 C# 12 引入了主构造函数。 主构造函数指定为初始化新对象而必须提供的参数。 

除非类是静态的,否则 C# 编译器将为无构造函数的类提供一个公共的无参数构造函数,以便该类可以实例化。 

通过将构造函数设置为私有构造函数,可以阻止类被实例化,如下所示:

class NLog
{// Private Constructor:private NLog() { }public static double e = Math.E;  //2.71828...
}

 结构类型的构造函数类似于类构造函数。 使用 new 实例化结构类型时,将调用构造函数。 将 struct 设置为其 default 值时,运行时会将结构中的所有内存初始化为 0。 在 C# 10 之前,structs 不能包含显式无参数构造函数,因为编译器会自动提供一个。 

以下代码使用 Int32 的无参数构造函数,因此可确保整数已初始化:

int i = new int();
Console.WriteLine(i);// 但是,下面的代码会导致编译器错误,因为它不使用 new,而且尝试使用尚未初始化的对象:
int i;
Console.WriteLine(i);// 或者,可将基于 structs 的对象(包括所有内置数值类型)初始化或赋值后使用,如下面的示例所示:
int a = 44;  // Initialize the value type...
int b;
b = 33;      // Or assign it before using it.
Console.WriteLine("{0}, {1}", a, b);

类和结构都可以定义采用参数的构造函数,包括主构造函数。 必须通过 new 语句或 base 语句调用带参数的构造函数。 类和结构还可以定义多个构造函数,并且二者均无需定义无参数构造函数。 例如:

public class Employee
{public int Salary;public Employee() { }public Employee(int annualSalary){Salary = annualSalary;}public Employee(int weeklySalary, int numberOfWeeks){Salary = weeklySalary * numberOfWeeks;}
}

可使用下面任一语句创建此类:

Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);

构造函数可以使用 base 关键字调用基类的构造函数。 例如:

public class Manager : Employee
{public Manager(int annualSalary): base(annualSalary){//Add further instructions here.}
}

在此示例中,在执行构造函数块之前调用基类的构造函数。 base 关键字可带参数使用,也可不带参数使用。 构造函数的任何参数都可用作 base 的参数,或用作表达式的一部分。 

在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用无参数构造函数(若有)。 下面的构造函数声明等效:

public Manager(int initialData)
{//Add further instructions here.
}public Manager(int initialData): base()
{//Add further instructions here.
}

如果基类没有提供无参数构造函数,派生类必须使用 base 显式调用基类构造函数。

构造函数可以使用 this 关键字调用同一对象中的另一构造函数。 和 base 一样,this 可带参数使用也可不带参数使用,构造函数中的任何参数都可用作 this 的参数,或者用作表达式的一部分。 例如,可以使用 this 重写前一示例中的第二个构造函数:

public Employee(int weeklySalary, int numberOfWeeks): this(weeklySalary * numberOfWeeks)
{
}

上一示例中使用 this 关键字会导致此构造函数被调用:

public Employee(int annualSalary)
{Salary = annualSalary;
}

可以将构造函数标记为public、private、protected、internal、protected internal 或 private protected。 这些访问修饰符定义类的用户构造该类的方式。 

可使用 static 关键字将构造函数声明为静态构造函数。 在访问任何静态字段之前,都将自动调用静态构造函数,它们用于初始化静态类成员。

相关文章:

windows C#-使用构造函数

实例化类或结构时,将会调用其构造函数。 构造函数与该类或结构具有相同名称,并且通常初始化新对象的数据成员。 在下面的示例中,通过使用简单构造函数定义了一个名为 Taxi 的类。 然后使用 new 运算符对该类进行实例化。 在为新对象分配内存…...

[react]redux异步处理和重写useDispatch

异步代码 import { createAsyncThunk, createSlice } from reduxjs/toolkit; import { getBanner } from ../http/request; import store from /store; export const fetchBanner createAsyncThunk(recommend/banners,async (args, thunkAPI) > {const response await ge…...

基础数据结构---栈

顺序表实现 一、栈类的声明 栈是一种特殊的线性表&#xff0c;可以由顺序表来实现&#xff0c;也可以由链表来实现&#xff0c;这节课&#xff0c;我们采用顺序表来实现栈。 #include <iostream>#include <stdexcept>using namespace std;template<typename …...

【HarmonyOS之旅】DevEco Studio的安装与环境配置

目录 1 -> 下载与安装DevEco Studio 1.1 -> 运行环境要求 1.2 -> 下载和安装DevEco Studio 2 -> 配置环境变量 3 -> 配置开发环境 4 -> 开发项目准备 5 -> 实用小技巧 5.1 -> 中文插件 2 -> 简化工程目录栏 1 -> 下载与安装DevEco Stud…...

Liveweb视频融合共享平台在果园农场等项目中的视频监控系统搭建方案

一、背景介绍 在我国的大江南北遍布着各种各样的果园&#xff0c;针对这些地处偏僻的果园及农场等环境&#xff0c;较为传统的安全防范方式是建立围墙&#xff0c;但是仅靠围墙仍然无法阻挡不法分子的有意入侵和破坏&#xff0c;因此为了及时发现和处理一些难以察觉的问题&…...

Android4.4 在系统中添加自己的System Service

添加系统service时&#xff0c;源码限制只能添加以android开头的包名&#xff0c;如果不是android开头的&#xff0c;编译时会提示找不到对应的文件。 比如说在系统中添加一个包名为&#xff1a;tel.gateway.connservice的系统服务。 1.在framework/base目录下面创建如下路径&a…...

【C++】C++实现字符串大小写转换功能

在C中&#xff0c;实现字符串大小写转换可以通过标准库中的函数来完成。以下是两种常见的方法&#xff1a; 使用标准库函数std::transform std::transform是一个泛型算法&#xff0c;可以用来对序列中的每个元素应用一个给定的函数&#xff0c;并把结果存储到另一个序列中。这…...

【蓝桥杯】43696.小数第n位

小数第n位 题目描述 我们知道&#xff0c;整数做除法时&#xff0c;有时得到有限小数&#xff0c;有时得到无限循环小数。如果我们把有限小数的末尾加上无限多个0&#xff0c;那么有限小数和无限小数就都有了统一的形式。 本题的任务是:在上面的约定下&#xff0c;求整数除法…...

进程间通信方式---消息队列(System V IPC)

进程间通信方式—消息队列&#xff08;System V IPC&#xff09; 文章目录 进程间通信方式---消息队列&#xff08;System V IPC&#xff09;消息队列1.消息队列进程间通信原理2.msgget 系统调用3.msgsnd 系统调用4.msgrcv 系统调用5.msgctl 系统调用6.函数使用案例7.实现生产者…...

windows10 安装wsl、迁移到其他盘

介绍一下在windows10 安装和迁移wsl。由于公司发了通知不能在使用docker desktop&#xff0c;只能另找方法使用docker了&#xff0c;于是想安装一个wsl&#xff0c;然后在装一个docker。 安装wsl ## 查看wsl 版本 wsl.exe --list --online## 安装Ubuntu-22.04 wsl.exe --inst…...

el-divide(vue3总)

分割线 使用...

python —— 常用命令行的命令

目 录 python命令行查看安装版本查看安装路径升级pip工具安装包升级包卸载安装包查看包的信息详情查询已安装的包查询可升级的包显示包所在目录及信息搜索包使用指定版本运行脚本运行常见错误 python命令行 产品研发中通常需要使用一些小工具来辅助调试功能&#xff0c;比如采…...

C++ 23版的最新特性

C 23 是 C 编程语言的最新标准版本&#xff0c;于 2023 年正式发布&#xff0c;带来了诸多新特性与改进&#xff0c;以下是一些主要内容&#xff1a; 1.语言特性 1.显式对象参数&#xff08;Deducing this&#xff09;&#xff1a;显式对象参数&#xff08;Deducing this&…...

什么是 Memory-bound stalls,以及如何优化

Memory-bound stalls 是指在计算机系统中&#xff0c;程序的性能受到内存访问速度的限制&#xff0c;导致处理器无法高效执行指令。这种情况通常发生在 CPU 需要等待数据从内存中加载时&#xff0c;而不是在执行计算或处理指令时。 Memory-bound stalls 的成因 访问延迟&…...

机器学习 | 非线性回归拟合数据时的离群值检测

非线性回归是一种用于模拟变量之间复杂关系的强大工具。然而&#xff0c;离群值的存在可能会显着扭曲结果&#xff0c;导致参数估计不准确和预测不可靠。因此&#xff0c;检测离群值对于稳健的非线性回归分析至关重要。本文深入研究了在非线性回归中识别离群值的方法和技术&…...

使用elasticsearch-head插件修改elasticsearch数据

1、先使用elasticsearch-head插件基本查询功能找到要修改的数据 2、切换到复合查询界面 url&#xff1a; http://es的ip地址:端口号/索引名称/文档类型&#xff08;没特殊设置过就是_doc&#xff09;/文档id/ 例子&#xff1a;http://127.0.0.1:9200/tab_inout_record/_doc/84…...

202412月最新植物大战僵尸杂交版【V3.0.1】更新内容与下载

以下是对UI优化和新内容添加的摘要&#xff1a; UI优化摘要&#xff1a; 主界面重做&#xff1a;对游戏的主界面进行全面的设计更新&#xff0c;提升用户体验。商店重做&#xff1a;对游戏内的商店界面进行重新设计&#xff0c;以改善玩家的购物体验。选卡界面增加图鉴功能&a…...

游戏渠道假量解决方案

某推广公司在推广过程中被查出“短期内点击量激增”“存在同一地址多次访问”“已注册用户重复注册”等数据作弊行为&#xff0c;法院判罚退还服务费200余万元&#xff0c;并赔偿违约金约350万元。 某公司为提升其游戏在应用商店榜单排名&#xff0c;委托某网络公司进行下载、注…...

Java系统对接企业微信审批项目流程

若依做的一个系统需求需要对接企业微信的人员去审核订单 回款之类&#xff0c;以下是详细步骤. 1.首先登入企业微信管理后台&#xff1a; 企业微信 2.找到应用管理 3.自建一个应用 4.这些数据都可以拿到 5.配置可信Ip 6.进入有两种方法让你去配置 &#xff0c;第一种用公司的…...

基于Springboot人口老龄化社区服务与管理平台【附源码】

基于Springboot人口老龄化社区服务与管理平台 效果如下&#xff1a; 系统登陆页面 系统主页面 社区信息页面 社区文件页面 活动报名页面 走访任务管理页面 社区资讯页面 老人信息管理页面 研究背景 随着社会老龄化的加剧&#xff0c;老年人口比例逐渐增加&#xff0c;对老年…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...