关于结构类型中使用readonly修饰变量

A332059525 2024-03-28 14:59:20

如图,书上讲的 struct结构类型用readonly 修饰了变量且无法赋值初始值,外部调用了该结构无法修改该变量,所以不明白结构类型用readonly修饰意义何在?

 

 

...全文
180 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 03-28
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/8080346, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
C#的各种名词: 常数:声明时用const修饰,是隐式静态类型 域:一个代表和某对象或类相关的变量的成员 字段:和属性相同,是用来存储对象的值,可以直接访问数据且不能对数据添加任何限制,但是属性不能且可以对数据添加访问限制。一个在类或结构的定义声明的变量。可以被这个类或者结构的所有成员函数(方法、构造函数)使用,可以是值类型或引用类型,主要有实例字段和静态字段。区别于局部变量在于局部变量只能被给定的函数或代码块使用 属性:一种用于访问对象或类的特性的成员。属性的访问器是一种使属性可以像公共数据成员一样被使用的特殊方法(get/set方法)。属性结合了字段和方法的多个方面,对于对象的用户,它显示为字段;对于类的实现者,它是一个或两个代码块(用于表示get/set访问器)。写类的时候使用System.Serializable属性以便使类的成员可以序列化 方法:是一种用于实现可以由对象或类执行的计算或操作的成员。类的方法主要是和类相关联的动作,它是类的外部界面,对于那些私有的字段来说,外部界面实现对它们的操作一般只能通过方法来实现。方法在类或结构声明,声明时需要制定访问级别、返回值、方法名称及方法参数。一个方法的签名由它的名称以及它的形参的个数、修饰符和类型组成。方法的签名是方法的唯一标识(同一个类的区别标识)。 方法的重载:是指方法名相同,但参数类型、个数或顺序不同的方法,与返回值无关(同一类或子类之间) 方法的重写:子类对父类方法的重新实现(方法头相同,方法体即代码块不同) 事件:是使得对像和类提供通知的成员。一个类通过提供事件声明来定义一个事件,这看起来与域和事件声明相当类似,但是有一个event关键字。这个声明的类型必须是delegate类型。如下例子: public delegate void EventHandler(object sender, Event e); public class Button { public event EventHandler Click; public void Reset() { Click = null; } } 索引:是使得对象可以像数组一样被索引的成员 结构:一种值类型,几个数据组成的数据结构。向方法传递结构时,是通过传值方式传递的,结构实例化可以不用new,结构可以声明构造函数,但必须带参数,且声明的构造函数是用来对成员初始化的,必须包含每个字段。结构不能从另一个结构或类继承而来,但可以实现接口,结构不能初始化实例。结构存储在栈且只用来表示小的数据结构,类存储在托管堆 类:是一种数据结构,是具有相同或相似结构、操作和约束规则的对象组成的集合。算法和数据结构的集合(对象),具有封装、继承、多态等特点。父类—基类、子类—派生类。类的多态是指不同的类进行同一操作可以有不同的行为。类是相同对象的集合,并为这些对象定义了编程语言上的属性和方法。类修饰符:new在类声明时使用,public公共的,访问不受限,protected只能从其所在类和所在类的子类进行访问,internal只有其所在类才能进行访问,private私有的,abstract抽象类,不能实例化,sealed密封类,不能被继承 虚拟成员:声明为virtual的类成员 析构函数:以类名+~来命名的,不能有参数,不能有任何修饰符而且不能被调用。当某个类的实例被认为不再有效并符合析构条件时,.NET Framework类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收,一个类只能有一个析构函数。一般准则是,除非有迫不得已的原因,不要使用析构函数,而应把清楚操作交给运行时完成 接口:声明的所有成员隐式的为public和abstract。在命名空间声明的接口可以被授予public或internal访问类型。嵌套的接口可以被授予public、protected、internal、protected internal或private访问类型。默认为internal.接口的成员隐式的被声明为public和abstract访问类型且没有实现没有修饰符 密封类:密封类不能作为基类被继承,但可以继承别的类或接口,密封类不能声明受保护的成员或虚成员,密封类不能声明为抽象的,声明密封类用sealed.密封方法只能用于对基类的虚方法进行实现,声明密封方法时同时使用sealed和override且必须通过重写基类的虚方法来实现 名称空间:类似java的包 集合: 代表: 访问修饰符:private、public、protected、internal:局部的 readonly:只读修饰符 new(新的)、static(静态的)、virtual(虚拟的)、override()、sealed(密封的)、abstranct(抽象的)、extern(外面的) 派生类调用基类的方法可以使用base关键字,如base.Method();
C#本质论(第3版) 详细介绍C# 4.0 第1章 c#概述 1.1 hello world 1.2 c#语法基础 1.2.1 c#关键字 1.2.2 类型定义 1.2.3 main 1.2.4 语句和语句分隔符 1.2.5 空白 1.3 使用变量 1.3.1 数据类型 1.3.2 变量的声明 1.3.3 变量的赋值 1.3.4 变量使用 1.4 控制台输入和输出 1.4.1 从控制台获取输入 1.4.2 将输出写入控制台 1.5 注释 1.6 托管执行和公共语言基础结构 1.7 c#和net版本 .1.8 cil和ildasm 1.9 小结 第2章 数据类型 2.1 基本数值类型 2.1.1 整数类型 2.1.2 浮点类型 2.1.3 decimal类型 2.1.4 字面值 2.2 更多基本类型 2.2.1 布尔类型 2.2.2 字符类型 2.2.3 字符串 2.3 null和void 2.3.1 null 2.3.2 void 2.4 类型的分类 2.4.1 值类型 2.4.2 引用类型 2.5 可空修饰符 2.6 数据类型之间的转换 2.6.1 显式转型 2.6.2 隐式转型 2.6.3 不进行转型的类型转换 2.7 数组 2.7.1 数组的声明 2.7.2 数组的实例化和赋值 2.7.3 数组的使用 2.7.4 字符串作为数组使用 2.7.5 常见错误 2.8 小结 第3章 运算符和控制流 3.1 运算符 3.1.1 一元运算符正和负 3.1.2 二元算术运算符 3.1.3 圆括号运算符 3.1.4 赋值运算符 3.1.5 递增和递减运算符 3.1.6 常量表达式 3.2 流控制概述 3.2.1 if语句 3.2.2 嵌套if 3.3 代码块 3.4 作用域和声明空间 3.5 布尔表达式 3.5.1 关系运算符和相等性运算符 3.5.2 逻辑布尔运算符 3.5.3 逻辑求反运算符 3.5.4 条件运算符 3.5.5 空接合运算符 3.6 按位运算符 3.6.1 移位运算符 3.6.2 按位运算符 3.6.3 按位赋值运算符 3.6.4 按位取反运算符 3.7 控制流语句 3.7.1 whi.1 e和do/while循环 3.7.2 for循环 3.7.3 foreach循环 3.7.4 switch语句 3.8 跳转语句 3.8.1 break语句 3.8.2 continue语句 3.8.3 go to语句 3.9 c#预处理器指令 3.9.1 排除和包含代码 3.9.2 定义预处理器符号 3.9.3 生成错误和警告 3.9.4 关闭警告消息 3.9.5 nowarn:选项 3.9.6 指定行号 3.9.7 可视编辑器提示 3.10 小结 第4章 方法和参数 4.1 方法的调用 4.1.1 命名空间 4.1.2 类型名称 4.1.3 作用域 4.1.4 方法名称 4.1.5 参数 4.1.6 方法返回值 4.1.7 语句与方法调用的比较 4.2 方法的声明 4.2.1 参数声明 4.2.2 方法返回值声明 4.3 uslng指令 4.4 main()的返回值和参数 4.5 参数 4.5.1 值参数 4.5.2 引用参数 4.5.3 输出参数 4.5.4 参数数组 4.6 递归 4.7 方法重载 4.8 可选参数 4.9 用异常实现基本错误处理 4.9.1 捕捉错误 4.9.2 使用throw语句报告错误 4.10 小结 第5章 类 5.1 类的定义和实例化 5.2 实例字段 5.2.1 实例字段的声明 5.2.2 实例字段的访问 5.3 实例方法 5.4 使用this关键字 5.5 访问修饰符 5.6 属性 5.6.1 属性的声明 5.6.2 自动实现的属性 5.6.3 命名规范 5.6.4 提供属性验证 5.6.5 读和只写属性 5.6.6 为取值方法和赋值方法指定访问修饰符 5.6.7 属性作为虚字段使用 5.6.8 属性和方法调用不允许作为ref或out参数值使用 5.7 构造器 5.7.1 构造器的声明 5.7.2 默认构造器 5.7.3 对象初始化器 5.7.4 构造器的重载 5.7.5 使用this调用另一个构造器 5.8 静态成员 5.8.1 静态字段 5.8.2 静态方法 5.8.3 静态构造器 5.8.4 静态属性 5.8.5 静态类 5.9 扩展方法 5.10 封装数据 5.10.1
资源较大,存在网盘,下载给出地址。 第1篇 技术基础总结  第1章 .net,你真的知道了吗   1.1 搞清自己是干什么的   1.2 .net的几个特性   1.3 万丈高楼平地起:面试者必会   1.4 .net的面向对象之门   1.5 .net开发几把小刀   1.6 visual studio.net 2008 实战      本章常见技术面试题   常见面试技巧之面试前的准备   本章小结  第2章 细节决定成败   2.1 equals()和运算符==的区别   2.2 const和readonly的区别   2.3 private、protected、public和internal的区别   2.4 sealed、new、virtual、abstract与override   2.5 abstract class与interface   2.6 公共变量与属性的区别   2.7 参数修饰符params、out和ref的区别   2.8 值类型和引用类型的区别 .  2.9 结构与类的区别   2.10 dispose()和close()、finalize()的区别   2.11 string和stringbuilder有什么区别   2.12 debug版本和release版本的区别   本章常见技术面试题   常见面试技巧之细节决定成败   本章小结  第3章 asp.net开发大杂烩   3.1 页面生命周期   3.2 页面状态管理   ……  第4章 windows窗体编程你也行  第5章 数据库开发  第6章 关于xml  第7章 web service开发详解  第8章 用户体验的杀手锏——ajax  第9章 系统与文件操作  第10章 网络应用开发  第11章 windows service开发  第12章 新技术初探 第2篇 系统架构设计思想  第13章 面向对象思想  第14章 三层架构项目开发  第15章 大型网站的性能优化与安全  第16章 系统设计的原则和技巧 第3篇 项目实战解析  第17章 权限角色管理项目解析  第18章 单点登录系统的设计与实现  第19章 常用.net开发工具介绍
第1篇 技术基础总结  第1章 .net,你真的知道了吗   1.1 搞清自己是干什么的   1.2 .net的几个特性   1.3 万丈高楼平地起:面试者必会   1.4 .net的面向对象之门   1.5 .net开发几把小刀   1.6 visual studio.net 2008 实战      本章常见技术面试题   常见面试技巧之面试前的准备   本章小结  第2章 细节决定成败   2.1 equals()和运算符==的区别   2.2 const和readonly的区别   2.3 private、protected、public和internal的区别   2.4 sealed、new、virtual、abstract与override   2.5 abstract class与interface   2.6 公共变量与属性的区别   2.7 参数修饰符params、out和ref的区别   2.8 值类型和引用类型的区别 .  2.9 结构与类的区别   2.10 dispose()和close()、finalize()的区别   2.11 string和stringbuilder有什么区别   2.12 debug版本和release版本的区别   本章常见技术面试题   常见面试技巧之细节决定成败   本章小结  第3章 asp.net开发大杂烩   3.1 页面生命周期   3.2 页面状态管理   ……  第4章 windows窗体编程你也行  第5章 数据库开发  第6章 关于xml  第7章 web service开发详解  第8章 用户体验的杀手锏——ajax  第9章 系统与文件操作  第10章 网络应用开发  第11章 windows service开发  第12章 新技术初探 第2篇 系统架构设计思想  第13章 面向对象思想  第14章 三层架构项目开发  第15章 大型网站的性能优化与安全  第16章 系统设计的原则和技巧 第3篇 项目实战解析  第17章 权限角色管理项目解析  第18章 单点登录系统的设计与实现  第19章 常用.net开发工具介绍 附录a 软件编码规范

110,541

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧