C# 中的readonly属性
例如我们这里有一个类
class TestClass2{private int someValue;public void ChangeValue(int newValue){someValue = newValue;}public int ShowValue(){return someValue;}}
而在另一个类中使用它
class TestClass{private readonly TestClass2 tc; // 注意此处tc是readonly的public TestClass(){tc = new TestClass2();}public void ChangeTCValue(int value){tc.ChangeValue(value);}public void Show(){Console.WriteLine("{0}", tc.ShowValue());}}
我们看到虽然tc这个字段是readonly的,但是可以使用方法来改变tc中someValue的值。似乎这个“只读”失去了意义,因为可以修改它的值的话还叫什么“只读”呢?
非也!
从上面的代码中我们可以看到,tc的类型是TestClass2,是一个引用类型。而引用类型是必须用new关键字为它分配了一块内存以后它才能在后续代码中工作的。也就是说,tc这个变量仅仅是一块内存地址罢了。这里的“readonly” tc只是无法再重新更改它的引用,但它所引用对象的属性是可以改变的。
那么为什么不用const呢?还是因为tc是引用,是动态分配内存的,不可能在编译阶段就确定它的地址,这点和值类型(包括string)是完全不一样的。
综上所述,可以得出结论:readonly修饰的字段,其初始化仅是固定了其引用(地址不能修改),但它引用的对象的属性是可以更改的。
当然,这里的“地址不能修改”指的是在代码中不能再对readonly变量进行再赋值,实际运行情况中可能会遇到GC或反射改变内存的情况。但是在本文所说的环境下不必考虑。
所以,大胆放心的用readonly吧,这样还可以防止不必要的再赋值,保证了这个对象的安全性。
转载于:https://www.cnblogs.com/ShaYeBlog/p/10394559.html
C# 中的readonly属性相关推荐
- 使用JavaScript在input标签中添加readonly属性
JavaScript如何将readonly属性添加到input标签?下面本篇文章就来给大家介绍一下使用JavaScript将readonly属性添加到input标签的方法,希望对大家有所帮助. 在Ja ...
- 关于datagridview中列的readonly属性
1.如何实现datagridview中的某一列能够单独编辑其余列不能编辑 必须先将datagridview属性中的readonly属性设置为false,然后再将不需要编辑的列的readonly属性设置 ...
- input的readonly属性与TextBox的ReadOnly和Enabled属性区别
input的readonly属性:可以通过js修改input的value,然后提交到服务器端,可获得修改后的值. TextBox的ReadOnly属性:通过js修改Text值,提交到服务器,服务器商无 ...
- HTML的readonly属性怎么用?
readonly属性是一个布尔属性,可用于指定在input或textarea元素中写入的文本是只读的.这意味着用户不能修改或更改特定元素中已经存在的内容(但是,用户可以对其进行制表.突出显示和复制文本 ...
- html 设置readonly属性,js与html中readonly属性设置对比
说明: readonly属性在html标签里使用不区分大小写. 在js中使用,IE不能识别"readonly",要用"readOnly". 下面对比下IE与FF ...
- html中文本框的readonly属性和disabled属性的区别
最近公司新来的一个实习生在开发系统时对于文本框的readonly属性和disabled属性两者之间有什么不同一直搞不太清楚,其实这两个东西如果不去深究,简单的使用的话大部分情况下两者还是可以通用的,不 ...
- Mybatis二级缓存配置中readOnly属性的理解
二级缓存中有一个属性为readOnly 官网的解释如下: readOnly(只读)属性可以被设置为 true 或 false. 1.(true)只读的缓存会给所有调用者返回缓存对象的相同实例. 因此这 ...
- Selenium中怎样解决输入框带有readonly属性或存在日历框问题
Selenium中怎样解决输入框带有readonly属性或存在日历框问题 在学习Selenium WebDriver API时,我们通常会遇到带有readonly属性的输入框或日历框(如下图),这时我 ...
- selenium自动化测试中js修改页面元素的readonly属性
from time import sleepfrom selenium import webdriver from selenium.webdriver import Keys from seleni ...
最新文章
- zabbix监控客户端(二)
- SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件
- 解决MPLAB X IDE的文件注释出现乱码的问题
- 群辉NAS+KODI (二)----NAS文件配置+电视安装kodi安装配置
- createinstance.java,weex android 0.17.0 createInstance fail
- linux下nginx安装与设置开机启动
- 360视频云Web前端HEVC播放器实践剖析
- php用字母数字生成用户名,请问生成字母加数字
- java编译运行_如何编译运行一个简单的java程序
- 如何记录流水账,打开图表查看账目
- 中国土地市场销售规模状况与投资战略研究报告2022版
- 全网最细海龟 (turtle) 画图讲解 (一):初探海龟绘图
- 量化交易入门阶段——MACD的背离用法(一)——DIFF背离
- Failed to introspect Class [com.ssm.controller.OrderController] from ClassLoader [ParallelWebappClas
- 最简单的输出四位数的每个位上的数字
- 正则表达式中反斜杠的另一用法
- php表格制作底纹怎么做,HTML表格标记教程(36):表头的背景色属性BGCOLOR
- GloVe 词向量模型
- 5个超好用的自媒体网站,免费用
- linux怎么远程调整屏幕亮度,linux怎么调节屏幕亮度
热门文章
- 编写高效且优雅的 Python 代码
- android二级菜单实现,Android编程实现二级下拉菜单及快速搜索的方法
- oracle 跨服务器推送视图_Oracle11g的v$diag_info视图获得控制文件转储文件名及位置...
- 查询前10条_98条铁路!2021年底前计划开工建设铁路进度一览(10月8日更新)
- pwm控制舵机转动角度程序_舵机的内部结构及工作原理
- linux kernel 下的hash 和链表 应用
- 我的内核学习笔记9:Intel内部看门狗iTCO_wdt驱动
- 我的YUV播放器MFC小笔记:注册表读写
- ole object interface 能获取图片吗_常见的闲鱼辅助软件有哪些,你知道吗
- 【ElasticSearch】大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk