C# 8 新特性 - 只读struct成员

从C# 8开始,我们可以在struct的成员上使用readonly修饰符。 

struct的成员添加readonly修饰符就表示告诉编译器和开发者该成员不可以修改struct的状态。 

 

看下面这个例子: 

640?wx_fmt=png

这里的ToString()方法不会修改Point这个struct的状态,所以我们可以在该方法上添加readonly修饰符来表示其只读: 

640?wx_fmt=png

但是这里会出现警告,因为 ToString 访问未标记为 readonly  Distance 属性。也就是需要创建防御性副本时,编译器会发出警告 

由于Distance属性不会修改状态,所以可以在它前边加上readonly修饰符以修复此警告: 

640?wx_fmt=png

 

请注意,readonly 修饰符对于只读属性是必须要添加的。 编译器会假设 get 访问器可以修改状态;所以必须显式声明 readonly 

但是自动实现的属性是一个例外;编译器将所有自动实现的 Getter 视为 readonly,因此,此处无需向 X  Y 属性添加 readonly 修饰符。 

 

如果我在该struct里面再添加一个修改状态的方法: 

640?wx_fmt=png

由于该方法确实修改了struct的状态,所以如果在该方法上再加上readonly修饰符的话,编译器就会报错。 

 

而如果我把readonly修饰符去掉的话,那么就不会报错了: 

640?wx_fmt=png

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

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

相关文章

.NET Core 3.0 中间件 Middleware

中间件官网文档解释:中间件是一种装配到应用管道以处理请求和响应的软件 每个中间件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。使用 IApplicationBuilder 创建中间件管道ASP.NET Core 请求管道包含一系列请求委托&…

重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境

今天(北京时间 2019 年 11 月 4 日),在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版!概览Visual Studio Online 提供了由云服务支撑的开发环境。无论是一个长期项目,或是…

Ubuntu Linux将支持所有树莓派设备

Canonical 近期公开了对 Raspberry Pi 4 的支持计划,并表示将支持所有 Raspberry Pi 设备。随着 Ubuntu Server 19.10 版本的发布,Canonical 宣布正式支持 Raspberry Pi 4,Raspberry Pi 4 性能强大,但成本较低,可以在边…

面试官:你连RESTful都不知道我怎么敢要你?

加个“星标★”,每天11.50,好文必达全文约4000字,预计阅读时间8分钟面试官:了解RESTful吗?01 前言回归正题,看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非…

深入理解.NET Core的基元(二) - 共享框架

原文:Deep-dive into .NET Core primitives, part 2: the shared framework作者:Nate McMaster[1] 译文:深入理解.NET Core的基元(二) - 共享框架 作者:Lamond Lu本篇是之前翻译过的《深入理解.NET Core的基…

net core WebApi——使用xUnits来实现单元测试

前言从开始敲代码到现在,不停地都是在喊着记得做测试,记得自测,测试人员打回来扣你money之类的,刚开始因为心疼钱(当然还是为了代码质量),就老老实实自己写完自己跑一遍,没有流程没有…

python利用opencv标注bounding box

http://blog.csdn.net/xieqiaokang/article/details/60780608 1. 函数 用 OpenCV 标注 bounding box 主要用到下面两个工具——cv2.rectangle() 和 cv2.putText()。用法如下: # cv2.rectangle() # 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细 cv2…

微软发布 SQL Server 2019 新版本

2019 年 11 月 4 日,微软在美国奥兰多举办的 Ignite 大会上发布了关系型数据库 SQL Server 的新版本。与之前版本相比,新版本的 SQL Server 2019 具备以下重要功能:在 Linux 和容器中运行的能力,连接大数据存储系统的 PolyBase 技…

AdminLTE 3.0发布了

点击蓝字关注我们前言在11月2日,作者正式发布了AdminLTE 3.0版本。该版本基于Bootstrap 4.x。使用Bootstrap 4.x的小伙伴可以愉快的使用AdminLTE。GithubAdminLTE是一个完全响应的管理模板。基于Bootstrap 4框架。高度可定制且易于使用。适合从小型移动设备到大型台…

这位优秀的.NET开发者是怎样炼成的?

本文来自DotNET技术圈作者:邹溪源一,社区的小圈子今年3月的一次技术交流活动上,那是我们.NET技术社区第一次组织线下活动,由于没什么经验,所以活动组织得比较仓促,内容也比较一般,效果还是有点欠…

求知无限,刷新.NET 中国社区

2019 Microsoft Ignite The Tour 2020年1月13日至14日深圳会展中心举办,今年的大会是免费的哦,所以也很火爆,我们为您开通专属报名渠道,,扫下方二位码 请在注册时务必填写RSVPCode: MITTCE。大会全面解锁微软黑科技:&g…

使用ASP.NET Core 3.x 构建 RESTful API - 1. 开始

以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本。预备知识:ASP.NET Core 和 C# 工具:Visual Studio 2019最新版(VSCode、VS for Mac,Rider等也凑合),POSTMAN Web API Web API…

.NET Core 3.1 编写混合 C++ 程序

前言随着 .NET Core 3.1 的第二个预览版本发布,微软正式将 C/CLI 移植到 .NET Core 上,从此可以使用 C 编写 .NET Core 的程序了。由于目前仅有 MSVC 支持编译此类混合代码,并且由于涉及到非托管代码,因此 C/CLI 目前不能跨平台&a…

在ASP.NET Core中编写合格的中间件

这篇文章探讨了让不同的请求去使用不同的中间件,那么我们应该如何配置ASP.NET Core中间件?其实中间件只是在ASP.NET Core中处理Web请求的管道。所有ASP.NET Core应用程序至少需要一个中间件来响应请求,并且您的应用程序实际上只是中间件的集合…

全网首发 PowerBI 秒级实时大屏通用解决方案

双十一来了,你准备好了吗?不管你是否准备完毕,我们带来了全网首发的 PowerBI 秒级实时大屏展示方案,你可以直接用来展示双十一的实时状况。我们一步步来说明这个套件模板教程。真实效果功能如下:全实时展示 双十一 当天…

普大喜奔 | Azure 免费送网站SSL证书啦!

点击上方蓝字关注“汪宇杰博客”导语就在今晨,微软推出了 App Service Managed Certificates 预览版。简单来说,这就是在 Azure App Service 服务的一项更新,免费送你SSL证书!只要点几下鼠标就能给网站加上SSL证书!并且…

VS Code 1.40 发布!可自行搭建 Web 版 VS Code!

今天(北京时间 2019 年 11 月 8 日),微软发布了 Visual Studio Code 1.40 版本。让我们来看看有哪些主要的更新。自建 Web 版 VS Code 如果你已经下载了 VS Code 在 GitHub 上的源代码,只需运行 yarn web,就能在 http:…

超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本

超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本前言上一篇自动化测试,全面且详细的介绍了从零开始到发布版本的步骤,这是传统的方式,本次为大家带来的是如何在5分钟内使用上docker进行CI/CD,毕竟现在的容器化如火如荼&am…

.NET Core 又一杀器! Web Blazor框架横空出世!

多年来,Javascript(及其子框架)已在浏览器中运行DOM(文档对象模型),并且掌握了脚本知识才能真正操作客户端UI。大约2年前,所有这些都随着Web Assembly的引入而发生了变化-Web Assembly允许在客户…

.NET Conf 2019 今天在上海开幕,图片直播地址

.NET Conf 2019 在上海开幕,全程提供图片直播:https://vzan.com/live/tvchat-1099246581下午的分会场内容如下:上午有个直播 ,请阅读原文访问https://vzan.com/live/tvchat-1099246581 。