c# - 将 TextReader 标记为只读
问题描述
鉴于:
class Parser {
public Parser(TextReader source) => Source = source;
public int GetChar() => Source.Read();
private readonly TextReader Source = null;
}
TextReader 如何标记为只读?我的意思是,您正在从缓冲区读取数据,并且情况正在发生变化。我错过了什么?
最初,我有没有只读的 Source,但它是由代码助手建议的,它确实可以编译。
谢谢
解决方案
这里要理解的是Source
类中的成员变量与对象本身是分开的。该变量保存对对象的引用。当您标记变量readonly
时,您将引用标记为只读,而不是对象。
这意味着您可以使用引用来调用方法并更改实际对象的属性。但它仍然很有价值,因为一旦构造函数设置了该引用,它就会保持设置。你知道这个引用另一端的对象在整个类的生命周期中都是同一个对象。
这很有帮助,例如,知道类中的成员永远不会为空。还要考虑诸如打开之类的事情,例如文件流、网络连接或数据库连接,其中更改对象可能会丢失连接另一端的重要状态。
推荐阅读
- javascript - 使用 js 预填充 Vuejs 输入
- html - 如何让盒子越过div?
- java - 解释 JobLauncherApplicationRunner 类是如何工作的?
- find - 多重查找、匹配、偏移、计数
- powershell - 使用 powershell 在 Exchange Online 中查找邮件传递到哪个文件夹
- flutter - Flutter - 如何获取 Video mp4 的 Stream Response 并下载
- python - 在 playwright 容器中运行 python 代码
- php - 读取目录以获取单个文件名或读取单个文件以在找到匹配项时获取新行
- php - PHP: pdo_sqlite.so (pdo_sqlite.so: undefined symbol: php_pdo_unregister_driver)) 在 Unknown on line 0
- ssh - 使用 pscp:服务器拒绝了我们的密钥