从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成员相关推荐

  1. Oracle 11g 新特性 -- 只读表(read-only table)说明

    一.Read only table说明 在Oracle 11g之前,如果我们想要对一个表设置为只读的,可以通过授予某些用户select 权限. 但是对于表的所有者来说,还是读写的. 在Oracle 1 ...

  2. 现代C++新特性 非静态数据成员默认初始化

    文字版PDF文档链接:现代C++新特性(文字版)-C++文档类资源-CSDN下载 1.使用默认初始化 在C++11以前,对非静态数据成员初始化需要用到初始化列表,当类的数据成员和构造函数较多时,编写构 ...

  3. Oracle 11g新特性之--只读表(read only table)

    Oracle 11g新特性之--只读表(read only table)       Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行 ...

  4. Oracle 11g 新特性:只读表(Read-only)

    Oracle 11g 新特性:只读表(Read-only) Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行DML操作和某些DDL操作 ...

  5. Docker 1.5新特性:支持IPV6、只读容器、容器运行监控,还有彩蛋

    本文讲的是Docker 1.5新特性:支持IPV6.只读容器.容器运行监控,还有彩蛋,[编者的话]Docker 1.5是今年Docker第一个发布版本,在这个版本中Docker加入很多期望已久的新功能 ...

  6. Oracle11g新特性:在线操作功能增强-Oracle11g的只读表功能

    在11g以前,Oracle提供的只读功能只到了数据库级和表空间级: SQL> CONN / AS SYSDBA Connected. SQL> SHUTDOWN IMMEDIATE Dat ...

  7. C#6.0,C#7.0新特性

    C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...

  8. 深入浅出之C++11新特性

    1. auto类型赋予新含义 1.1 auto类型定义 在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的.auto 表示变量是自动存储的,这也是编译 ...

  9. C++11新特性选讲 语言部分 侯捷

    C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...

最新文章

  1. leetcode算法题--重排链表★
  2. 关于SAP物流和供应链模块发展的一点思考
  3. tkinter 菜单添加事件_tkinter学习教程(七)
  4. 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)
  5. BZOJ5289 洛谷4437:[HNOI/AHOI2018]排列——题解
  6. python区域找图命令_python读取图片任意范围区域
  7. 【LeetCode笔记】27. 移除元素(Java、原地)
  8. 走进新华三解决方案 360°业务能力中心,读懂新华三如何助力企业数字化转型
  9. 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店预订系统
  11. (转)AS3 面相对象 高级话题
  12. SpringMVC之二:配置 Spring MVC
  13. wxpython wx listctrl_wxPython实现指定单元格可编辑的ListCtrl | 学步园
  14. bzoj 1036: [ZJOI2008]树的统计Count(树链剖分 点权)
  15. 微信H5页面ios分享失效
  16. 百度搜索信风算法上线,为什么要严厉打击翻页诱导行为?
  17. 数理统计——AQI预测
  18. Python+PyQt5实现灭霸响指
  19. 计算机毕业设计Java醋坊定制销售平台(源码+系统+mysql数据库+lw文档)
  20. 全国计算机等级考试二级三级对应,全国计算机等级考试三级(网络技术)对应的是三级A还是三级B?...

热门文章

  1. 理解 Delphi 的类(七) - 认识类的多态
  2. ASP.NET程序中常用的三十三种代码(二)
  3. linux文件句柄,【LINUX】使用lsof处理文件恢复、句柄以及空间释放问题
  4. 从Ubuntu命令行按进程名称杀死进程
  5. ipad iphone开发_如何将iPhone或iPad置于恢复模式
  6. 在win10系统下怎样快速切换任务视图
  7. weblogic清除缓存
  8. crontab执行shell脚本日志中出现乱码
  9. 九度 1376 最近零子序列
  10. 用拖拉实现设备驱动配置(EsayHMI最新驱动配置方式)