没有合适的资源?快使用搜索试试~ 我知道了~
C#基础语法教程——创建记录类型
资源推荐
资源详情
资源评论
C#基础语法教程——创建记录类型
记录是使用基于值的相等性的类型。 C# 10 添加了 record structs,以便你可
以将记录定义为值类型。 两个记录类型的变量在它们的类型和值都相同时,它
们是相等的。 两个类类型的变量如果引用的对象属于同一类类型并且引用相同
的对象,则这两个变量是相等的。 基于值的相等性意味着可能需要的记录类型
中的其他功能。 声明 record 而不是 class 时,编译器将生成许多这些成员。
编译器针对 record struct 类型生成这些相同的方法。
本教程介绍以下操作:
• 确定是否将 record 修饰符添加到 class 类型。
• 声明记录类型和位置记录类型。
• 在记录中将你的方法替换为编译器生成的方法。
必备条件
你需要将计算机设置为运行 .NET 6 或更高版本,包括 C# 10 或更高版本编译
器。 自 Visual Studio 2022 或 .NET 6 SDK 起,开始提供 C# 10 编译器。
记录的特征
通过使用 record 关键字声明类型,修改 class 或 struct 声明,可以定义
记录
。
(可选)可以省略 class 关键字来创建 record class。 记录遵循基于值的相等性
语义。 为了强制执行值语义,编译器将为记录类型(record class 类型
和 record struct 类型)生成多种方法:
• Object.Equals(Object) 的替代。
• 一个虚拟的 Equals 方法,其参数为记录类型。
• Object.GetHashCode() 的替代。
• 用于 operator == 和 operator != 的方法。
• 记录类型实现 System.IEquatable<T>。
记录还提供了 Object.ToString() 的重写。 编译器使用 Object.ToString() 合成用
于显示记录的方法。 在编写本教程的代码时,你将浏览这些成员。 记录支
持 with 表达式,以启用记录的非破坏性修改。
还可使用更简洁的语法来声明位置记录。 声明以下位置记录时,编译器会合成
更多方法:
• 主构造函数,它的参数与记录声明上的位置参数匹配。
• 主构造函数的每个参数的公共属性。 对于 record class 和 readonly
record struct 类型,这些属性为 init-only。 对于 record struct 类型,它
们是可读写的。
• 用于从记录中提取属性的 Deconstruct 方法。
生成温度数据
数据和统计信息是你要使用记录时所需的内容。 在本教程中,你将构建一个用
于计算度日数的应用程序,以用于不同用途。 度日数是反映几天、几周或几个
月内采暖(或采暖不足)的度量。 度日数可跟踪和预测能源使用情况。 高温
天数越多表示使用空调的时间越多,降温天数越多意味着使用暖气炉的时间越
多。 度日数有助于管理植物种群,并且随着季节的变化,与植物的生长密切相
关。 度日数有助于跟踪动物为适应气候而进行的物种迁徙。
此公式基于给定的某一天的平均温度和基准温度。 若要计算一段时间内的度日
数,需要这段时间的每日最高温度和最低温度。 首先,我们要创建一个新的应
用程序。 生成新的控制台应用程序。 在名为“DailyTemperature.cs”的新文件中
创建新的记录类型:
C#复制
public readonly record struct DailyTemperature(double HighTemp, double
LowTemp);
上述代码定义了位置记录。 由于不打算从 DailyTemperature 记录继承并且该
记录应该不可变,因此该记录为 readonly record
struct。 HighTemp 和 LowTemp 属性是 init-only 属性,这意味着可在构造函
数中设置它们,或使用属性初始化表达式设置它们。 如果希望位置参数是可读
写的,则声明 record struct 而不是 readonly record
struct。 DailyTemperature 类型还有一个主构造函数,该构造函数具有两个与这
两个属性匹配的参数。 使用该主构造函数初始化 DailyTemperature 记录。 下
列代码将创建并初始化多个 DailyTemperature 记录。 第一个使用命名参数来
阐明 HighTemp 和 LowTemp。 剩余的初始值设定项使用位置参数来初始
化 HighTemp 和 LowTemp:
C#复制
private static DailyTemperature[] data = [
剩余13页未读,继续阅读
资源评论
icysmile131
- 粉丝: 4625
- 资源: 655
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用Java语言编写的九格拼游戏,找寻下曾经小时候的记忆.zip
- gakataka课堂管理系统
- 一个简单ssh(spring springMVC hibernate)游戏网站,在网上找的html模板,没有自己写UI,重点放在java后端上.zip
- 一个采用MVC架构设计、Java实现的泡泡堂游戏.zip
- 一个简易的对对碰游戏软件,运用Java、Java FX技术.zip
- 通过binder实现进程间通讯 ,可以使用service的binder或者 AIDL生成的Stub返回binder 实现demo
- 44f2abdbd6faa9938f9d8e4cace85309.JPG
- 一个简易的躲避子弹飞机小游戏,基于最简单的java ui.zip
- 一个西洋跳棋小游戏,写成桌面Java程序,实现了人机对战,对博弈树的遍历进行了极大极小值的alpha-beta剪枝算法进行优化.zip
- 一些java的小游戏项目,贪吃蛇啥的.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功