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 关键字将构造函数声明为静态构造函数。 在访问任何静态字段之前,都将自动调用静态构造函数,它们用于初始化静态类成员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研发效能DevOps: Vite 使用 Element Plus

目录 一、实验 1.环境 2.初始化前端项目 3.安装 vue-route 4.安装 pinia 5.安装 axios 6.安装 Element Plus 7.gitee创建工程 8. 配置路由映射 9.Vite 使用 Element Plus 二、问题 1.README.md 文档推送到gitee未自动换行 2.访问login页面显示空白 3.表单输入账户…

5G 模组 RG500Q常用AT命令

5G 模组 RG500Q常用AT命令 5G 模组 RG500Q常用AT命令 at ATQNWPREFCFG\"mode_pref\",nr5g && sleep 1 at ATQNWPREFCFG\"nr5g_band\",79 && sleep 1 at atqnwlock\"commo…

NVIDIA DeepStream插件之Gst-nvtracker

NVIDIA DeepStream插件之Gst-nvtracker 1. 源由2. 基础知识3. Gst-nvtracker插件3.1 插件参数3.2 插件API接口 4. 分析问题5. 总结6. 参考资料 1. 源由 这篇的主要目的是稍微吐槽下NVIDIA的设计,当然其实他们做的还是不错的(从系统架构设计角度看&#…

进程内存转储工具|内存镜像提取-取证工具

1.内存转储,内存转储(Memory Dump)是将计算机的物理内存(RAM)内容复制到一个文件中的过程,这个文件通常被称为“内存转储文件”或“核心转储文件”(Core Dump),内存转储的主要目的是…

Lua语言入门 - Lua 面向对象

Lua 面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构,通过创建和操作对象来设计应用程序。 以下几种编程语言都支持面向对象编程: CJavaObjective-CSmalltalkC#Ruby Lua 是…

Pyqt6在lineEdit中输入文件名称并创建或删除JSON文件

1、创建JSON文件 代码 import osdef addModulekeyWordFile(self):if "" ! self.lineEdit_module.text():moduleFile self.lineEdit_module.text() .jsonelse:self.toolLogPrinting(请输入模块名称)returnfilePath modulekeyWordFileDir moduleFileif os.path.e…

【Leetcode 热题 100】236. 二叉树的最近公共祖先

问题背景 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为:对于有根树 T T T 的两个节点 p p p、 q q q,最近公共祖先表示为一个节点 x x x,满足 x x x 是 p p p、 q q q 的祖先且 x x x 的深度尽可能大…

数据结构--堆的向上调整和向下调整

文章目录 1.完全二叉树2.堆向上调整3.堆向下调整4.测试代码 1.完全二叉树 下面的这个就是对于我们的完全二叉树的这个逻辑结构和物理结构的说明: 逻辑结构就是我们自己认为的进行购想出来的; 但是这个物理结构却是我们的这个数据结构在内存里面的真是…

智能挂号系统设计典范:SSM 结合 Vue 在医院的应用实现

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了医院预约挂号系统的开发全过程。通过分析医院预约挂号系统管理的不足,创建了一个计算机管理医院预约挂号系统的方案。文章介绍了医院预约挂号系统的系…

“魔法糖果盒的秘密:用朴素贝叶斯算法猜糖果颜色”

想象一下,你有一个神奇的糖果盒,这个糖果盒里有两种糖果:红色的和蓝色的。你闭上眼睛,从盒子里拿出一个糖果,然后尝一尝,你想知道这个糖果是红色的还是蓝色的。朴素贝叶斯算法就像是一个魔法规则&#xff0…

Transform组件的用法

文章目录 1. 概念介绍2. 使用方法3. 示例代码我们在上一章回中介绍了Checkbox Widget相关的内容,本章回中将介绍Transform Widget.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的Transform是一种容器类widget,它和Container组件类似。它可以包含其它的组件…

go面试问题

1 Go的内存逃逸如何分析 go build -gcflags-m main_pointer.go 2 http状态码 300 请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 301 永久移动。请求的资源已被永久的移动到新U…

康冠科技嵌入式面试题及参考答案

LCD 驱动你自己做了哪些内容? 在 LCD 驱动开发中,首先是硬件层面的理解。需要仔细研究 LCD 的数据手册,明确其引脚定义,包括电源引脚、数据引脚、控制引脚等。比如,对于常见的 RGB 接口 LCD,要清楚哪几个引脚是用于传输红、绿、蓝三种颜色的数据,以及像 VSYNC(垂直同步…

TouchGFX移植(5)增加触屏驱动

一)增加驱动代码gt9xxx.c和ctiic.c到工程中的BSP目录下: 二)更改触摸文件STM32TouchController.cpp 1)在STM32TouchController.cpp文件中增加: #include “gt9xxx.h” 2)增加gt9xxx_init(); void STM32TouchControlle…

初识面向对象晨考day09

1.类和对象什么关系 类是对象的抽象 对象是类的具体 2.什么是属性和方法 一类事物共有的特征,使用属性描述 一类事物共有的行为,使用方法描述 3.普通方法的定义格式 public 返回值类型 方法名(参数列表){} 4.什么是形参,什么是实参 形参是方法…

资源型数字化平台该如何顺利运营?

一、引言 随着信息技术的迅猛发展,资源型数字化平台在各领域的重要性日益凸显。此类平台整合各类资源,以数字化手段提升资源利用效率与价值,但确保其顺利运营面临诸多挑战。 二、资源型数字化平台特点 资源型数字化平台具有资源整合性&…

GitLab的安装和使用

1.GitLab 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能…

Leetcode 串联所有单词的子串

算法思想(中文解释) 这道题目要求我们在字符串 s 中找到所有子串,这些子串是字符串数组 words 中所有单词的串联,并且每个单词只能使用一次,且顺序可以任意。下面是代码的算法思想: 1. 核心思路 分解问题…

解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹

在《分区策略和管理分区计划的实践方案》这篇文章中,我们介绍了在ODC中制定分区策略及有效管理分区计划的经验。有不少用户在该帖下提出了使用中的问题,其中一个关于创建分区的限制条件的问题,也是很多用户遭遇的老问题。因此本文以其为切入&…

有哪些免费的 ERP 软件可供选择?哪些 ERP 软件使用体验较好?

想找个 “免费” 的 ERP 软件? 咱得知道,ERP 那可是涉及财务、人力、供应链、采购、销售等好多方面的重要企业软件。功能这么全,能免费才怪呢!真要是有免费的,早就火遍大江南北,说不定把市场都垄断了&…