C# 8 新特性 - 只读struct成员
从C# 8开始,我们可以在struct的成员上使用readonly修饰符。
为struct的成员添加readonly修饰符就表示告诉编译器和开发者该成员不可以修改struct的状态。
看下面这个例子:
这里的ToString()方法不会修改Point这个struct的状态,所以我们可以在该方法上添加readonly修饰符来表示其只读:
但是这里会出现警告,因为 ToString 访问了未标记为 readonly 的 Distance 属性。也就是需要创建防御性副本时,编译器会发出警告。
由于Distance属性不会修改状态,所以可以在它前边加上readonly修饰符以修复此警告:
请注意,readonly 修饰符对于只读属性是必须要添加的。 编译器会假设 get 访问器可以修改状态;所以必须显式声明 readonly。
但是自动实现的属性则是一个例外;编译器将所有自动实现的 Getter 视为 readonly,因此,此处无需向 X 和 Y 属性添加 readonly 修饰符。
如果我在该struct里面再添加一个修改状态的方法:
由于该方法确实修改了struct的状态,所以如果在该方法上再加上readonly修饰符的话,编译器就会报错。
而如果我把readonly修饰符去掉的话,那么就不会报错了:
C# 8 新特性 - 只读struct成员相关推荐
- Oracle 11g 新特性 -- 只读表(read-only table)说明
一.Read only table说明 在Oracle 11g之前,如果我们想要对一个表设置为只读的,可以通过授予某些用户select 权限. 但是对于表的所有者来说,还是读写的. 在Oracle 1 ...
- 现代C++新特性 非静态数据成员默认初始化
文字版PDF文档链接:现代C++新特性(文字版)-C++文档类资源-CSDN下载 1.使用默认初始化 在C++11以前,对非静态数据成员初始化需要用到初始化列表,当类的数据成员和构造函数较多时,编写构 ...
- Oracle 11g新特性之--只读表(read only table)
Oracle 11g新特性之--只读表(read only table) Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行 ...
- Oracle 11g 新特性:只读表(Read-only)
Oracle 11g 新特性:只读表(Read-only) Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行DML操作和某些DDL操作 ...
- Docker 1.5新特性:支持IPV6、只读容器、容器运行监控,还有彩蛋
本文讲的是Docker 1.5新特性:支持IPV6.只读容器.容器运行监控,还有彩蛋,[编者的话]Docker 1.5是今年Docker第一个发布版本,在这个版本中Docker加入很多期望已久的新功能 ...
- Oracle11g新特性:在线操作功能增强-Oracle11g的只读表功能
在11g以前,Oracle提供的只读功能只到了数据库级和表空间级: SQL> CONN / AS SYSDBA Connected. SQL> SHUTDOWN IMMEDIATE Dat ...
- C#6.0,C#7.0新特性
C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...
- 深入浅出之C++11新特性
1. auto类型赋予新含义 1.1 auto类型定义 在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的.auto 表示变量是自动存储的,这也是编译 ...
- C++11新特性选讲 语言部分 侯捷
C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...
最新文章
- leetcode算法题--重排链表★
- 关于SAP物流和供应链模块发展的一点思考
- tkinter 菜单添加事件_tkinter学习教程(七)
- 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)
- BZOJ5289 洛谷4437:[HNOI/AHOI2018]排列——题解
- python区域找图命令_python读取图片任意范围区域
- 【LeetCode笔记】27. 移除元素(Java、原地)
- 走进新华三解决方案 360°业务能力中心,读懂新华三如何助力企业数字化转型
- 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size
- 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店预订系统
- (转)AS3 面相对象 高级话题
- SpringMVC之二:配置 Spring MVC
- wxpython wx listctrl_wxPython实现指定单元格可编辑的ListCtrl | 学步园
- bzoj 1036: [ZJOI2008]树的统计Count(树链剖分 点权)
- 微信H5页面ios分享失效
- 百度搜索信风算法上线,为什么要严厉打击翻页诱导行为?
- 数理统计——AQI预测
- Python+PyQt5实现灭霸响指
- 计算机毕业设计Java醋坊定制销售平台(源码+系统+mysql数据库+lw文档)
- 全国计算机等级考试二级三级对应,全国计算机等级考试三级(网络技术)对应的是三级A还是三级B?...