快醒醒,C# 9 中又来了一堆关键词 init,record,with
一:背景
1. 讲故事
.NET5 终于在 2020-08-25 也就是前天发布了第八个预览版,这么多的预览版搞得我都麻木了,接踵而来的就是更多的新特性加入到了 C# 9 中,既然还想呆在这条船上,得继续硬着头皮学习哈,这一篇跟大家聊聊新增的几个关键词。
二:新增关键词
1. init
出来一个新语法糖,首先要做的就是去揭它的老底,这样可以方便推测它的应用场景,为了方便表述,我先上一个例子:
public class Person
{
public string Name { get; init; }
}
乍一看有点懵逼,没关系,先用 ILSpy 看一下,如下图:

上面这张图就已经很清晰的解释了,原来 init 就是自动生成了一个对 私有只读字段 的封装,对于 readonly 相信大家已经轻车熟路了,它的初始化只有两种方式:声明时和构造函数中,但从 C# 9 开始就多了一个属性赋值方式,也就是说现在有三种赋值方式了,还原代码如下:
public class Person
{
private readonly string name;
public string Name
{
get => name;
init
{
name = value;
}
}
}
这种方式要是换作以前肯定是报错的,如下图:

有一点要注意的是编译器还做了一个特殊限制,准你在 类初始化器 中使用,不准你单独拿出来赋值,如下图所示:

所以总的来说, init 的作用就是多了一种让你初始化 只读字段 的方式,仅此而已罢了。
2. record
为了方便演示,我先上一段代码,如下所示:
public record Person
{
public string Name { get; set; }
public int Age { get; set; }
}
看起来挺
快醒醒,C# 9 中又来了一堆关键词 init,record,with的更多相关文章
- 翻译:让网络更快一些——最小化浏览器中的回流(reflow)
关于reflowreflow(英音:[ri:’fləu] 美音:[ri’flo])在词典中的解释是回流,逆流.而在web应用中,翻译为回流有些牵强.我个人觉得,理解为回炉(重新塑形),似乎更加形象一点 ...
- dotnet 是 前30个增长最快速度的开源项目中排名第一的开发平台
CNCF 的博客 发了一篇文章 <Update on CNCF and Open Source Project Velocity 2020>,中文翻译参见 2020年CNCF和开源项目开发 ...
- Kooboo中主要的几个关键词中的关系
Kooboo中主要的几个关键词中的关系 Content Type //相当于数据库表 Content //相当于数据 View //部分View 她可以使用Content ...
- 如何从统计中批量获取BD搜索关键词及对应的入口页面?
前面我们介绍了通过cnzz的访问明细获取到搜索关键词及对应的入口页面,但是从BD搜索进来的关键词无法完整显示,只能呈现一些bd图片搜索的关键词,这是因为百度宣布从去年5月开始逐渐取消了referer关 ...
- 醒醒吧!互联网的真正未来不是AI,更不是VR,AR,而是区块链
这些力量并非命运,而是轨迹.他们提供的并不是我们将去向何方的预测,而是告诉我们,在不远的将来,我们会向那个方向前行,必然而然. ---凯文•凯利 文字与货币 人类在演化过程中,凭借智慧创造了无数事物, ...
- 醒醒吧少年,只用Cucumber不能帮助你BDD
转载:http://insights.thoughtworkers.org/bdd/ 引言 在Ruby社区中,测试和BDD一直是被热议的话题,不管是单元测试.集成测试还是功能测试,你总能找到能帮助你的 ...
- 醒醒!Python已经支持中文变量名啦!
最近,我在翻阅两本比较新的 Python 书籍时,发现它们都犯了一个严重的低级错误! 这两本书分别是<Python编程:从入门到实践>和<父与子的编程之旅>,它们都是畅销书,都 ...
- 对于delphi for linux心存梦想的同学,彻底醒醒吧
Borland 曾经多次做市场调查,很多人呼吁推出delphi for linux.可是直到kylix发展到第三版,borland才明白:一个内置C编译器环境并与之关系紧密的免费OS,没有人愿意花钱去 ...
- 那些鼓吹国内首个.NET 5框架的,该醒醒了!
前两天看过园子里有篇[国内首个 .NET 5 框架 XX 斩获 XXX stars,XXX 发布],一顿羡慕嫉妒恨啊.我这.net core 3.1才上手没几天,还没用热乎呢,你这.NET 5的框架都 ...
随机推荐
- Hyper-V设置固定IP
win+x以管理员启动PowerShell 创建虚拟交换机,等同于在Hyper-V管理器界面中新建虚拟网络交换机 New-VMSwitch -SwitchName "NAT-VM" ...
- PHP array_intersect_key() 函数
实例 比较两个数组的键名,并返回交集: <?php$a1=array("a"=>"red","b"=>"gree ...
- PHP imagealphablending - 设定图像的混色模式
imagealphablending — 设定图像的混色模式.高佣联盟 www.cgewang.com 语法 bool imagealphablending ( resource $image , b ...
- P4383 [八省联考2018]林克卡特树 树形dp Wqs二分
LINK:林克卡特树 作为树形dp 这道题已经属于不容易的级别了. 套上了Wqs二分 (反而更简单了 大雾 容易想到还是对树进行联通情况的dp 然后最后结果总和为各个联通块内的直径. \(f_{i,j ...
- BSOJ 5553 wangyurzee的树 prufer序列 容斥
BSOJ我也不知道在哪. 容易想到容斥. 考虑不合法的方案 想到强制某个点的度数为限制即可. 这样就变成了了总方案-一个不合法+两个不合法-3个......的模型了. 坑点 当强制两个相同的点时 方案 ...
- bzoj 4238 电压
LINK:电压 一张图 每个点可以为黑点或百点 每一条边的两端都必须为一黑一白.询问又多少条边满足除了这条边不满足条件其余所有边都满足条件. 分析一下这个所谓的条件 每一条边的两端必须为一黑一白 所以 ...
- Sharding-JDBC实现垂直拆分
参考资料:猿天地 https://mp.weixin.qq.com/s/wl8h6LIQUHztVuVbjfsU3Q 作者:尹吉欢 当一个项目量增大,数据表数量增多时,就需要对数据表进行垂直拆分, ...
- AI测温落地趋势:已成日常刚需 产品形态呈细分化发展
现如今不管走到哪儿,机场.车站.医院.商场.超市等公共场所都已经将体温检测作为常态化防疫手段.自全球疫情发生以来,不管欧洲.亚洲,还是中东.东南亚等国家都已经意识到,疫情防控的第一道关口便是测温. 而 ...
- 深度学习模型调优方法(Deep Learning学习记录)
深度学习模型的调优,首先需要对各方面进行评估,主要包括定义函数.模型在训练集和测试集拟合效果.交叉验证.激活函数和优化算法的选择等. 那如何对我们自己的模型进行判断呢?——通过模型训练跑代码,我们可以 ...
- java目前常用的几种定时任务
java目前常用的几种定时任务 JDK自带的Timer spring的Task Quartz elastic-job分布式定时任务 一.JDK自带的Timer Timer是jdk中提供的一个定时器工具 ...