例如我们这里有一个类

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属性相关推荐

  1. 使用JavaScript在input标签中添加readonly属性

    JavaScript如何将readonly属性添加到input标签?下面本篇文章就来给大家介绍一下使用JavaScript将readonly属性添加到input标签的方法,希望对大家有所帮助. 在Ja ...

  2. 关于datagridview中列的readonly属性

    1.如何实现datagridview中的某一列能够单独编辑其余列不能编辑 必须先将datagridview属性中的readonly属性设置为false,然后再将不需要编辑的列的readonly属性设置 ...

  3. input的readonly属性与TextBox的ReadOnly和Enabled属性区别

    input的readonly属性:可以通过js修改input的value,然后提交到服务器端,可获得修改后的值. TextBox的ReadOnly属性:通过js修改Text值,提交到服务器,服务器商无 ...

  4. HTML的readonly属性怎么用?

    readonly属性是一个布尔属性,可用于指定在input或textarea元素中写入的文本是只读的.这意味着用户不能修改或更改特定元素中已经存在的内容(但是,用户可以对其进行制表.突出显示和复制文本 ...

  5. html 设置readonly属性,js与html中readonly属性设置对比

    说明: readonly属性在html标签里使用不区分大小写. 在js中使用,IE不能识别"readonly",要用"readOnly". 下面对比下IE与FF ...

  6. html中文本框的readonly属性和disabled属性的区别

    最近公司新来的一个实习生在开发系统时对于文本框的readonly属性和disabled属性两者之间有什么不同一直搞不太清楚,其实这两个东西如果不去深究,简单的使用的话大部分情况下两者还是可以通用的,不 ...

  7. Mybatis二级缓存配置中readOnly属性的理解

    二级缓存中有一个属性为readOnly 官网的解释如下: readOnly(只读)属性可以被设置为 true 或 false. 1.(true)只读的缓存会给所有调用者返回缓存对象的相同实例. 因此这 ...

  8. Selenium中怎样解决输入框带有readonly属性或存在日历框问题

    Selenium中怎样解决输入框带有readonly属性或存在日历框问题 在学习Selenium WebDriver API时,我们通常会遇到带有readonly属性的输入框或日历框(如下图),这时我 ...

  9. selenium自动化测试中js修改页面元素的readonly属性

    from time import sleepfrom selenium import webdriver from selenium.webdriver import Keys from seleni ...

最新文章

  1. zabbix监控客户端(二)
  2. SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件
  3. 解决MPLAB X IDE的文件注释出现乱码的问题
  4. 群辉NAS+KODI (二)----NAS文件配置+电视安装kodi安装配置
  5. createinstance.java,weex android 0.17.0 createInstance fail
  6. linux下nginx安装与设置开机启动
  7. 360视频云Web前端HEVC播放器实践剖析
  8. php用字母数字生成用户名,请问生成字母加数字
  9. java编译运行_如何编译运行一个简单的java程序
  10. 如何记录流水账,打开图表查看账目
  11. 中国土地市场销售规模状况与投资战略研究报告2022版
  12. 全网最细海龟 (turtle) 画图讲解 (一):初探海龟绘图
  13. 量化交易入门阶段——MACD的背离用法(一)——DIFF背离
  14. Failed to introspect Class [com.ssm.controller.OrderController] from ClassLoader [ParallelWebappClas
  15. 最简单的输出四位数的每个位上的数字
  16. 正则表达式中反斜杠的另一用法
  17. php表格制作底纹怎么做,HTML表格标记教程(36):表头的背景色属性BGCOLOR
  18. GloVe 词向量模型
  19. 5个超好用的自媒体网站,免费用
  20. linux怎么远程调整屏幕亮度,linux怎么调节屏幕亮度

热门文章

  1. 编写高效且优雅的 Python 代码
  2. android二级菜单实现,Android编程实现二级下拉菜单及快速搜索的方法
  3. oracle 跨服务器推送视图_Oracle11g的v$diag_info视图获得控制文件转储文件名及位置...
  4. 查询前10条_98条铁路!2021年底前计划开工建设铁路进度一览(10月8日更新)
  5. pwm控制舵机转动角度程序_舵机的内部结构及工作原理
  6. linux kernel 下的hash 和链表 应用
  7. 我的内核学习笔记9:Intel内部看门狗iTCO_wdt驱动
  8. 我的YUV播放器MFC小笔记:注册表读写
  9. ole object interface 能获取图片吗_常见的闲鱼辅助软件有哪些,你知道吗
  10. 【ElasticSearch】大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk