首页 > 解决方案 > 将 TextReader 标记为只读

问题描述

鉴于:

class Parser {
  public Parser(TextReader source) => Source = source;
  public int GetChar() => Source.Read();
  private readonly TextReader Source = null;
}

TextReader 如何标记为只读?我的意思是,您正在从缓冲区读取数据,并且情况正在发生变化。我错过了什么?

最初,我有没有只读的 Source,但它是由代码助手建议的,它确实可以编译。

谢谢

标签: c#

解决方案


这里要理解的是Source类中的成员变量与对象本身是分开的。该变量保存对对象的引用。当您标记变量readonly时,您将引用标记为只读,而不是对象。

这意味着您可以使用引用来调用方法并更改实际对象的属性。但它仍然很有价值,因为一旦构造函数设置了该引用,它就会保持设置。你知道这个引用另一端的对象在整个类的生命周期中都是同一个对象。

这很有帮助,例如,知道类中的成员永远不会为空。还要考虑诸如打开之类的事情,例如文件流、网络连接或数据库连接,其中更改对象可能会丢失连接另一端的重要状态。


推荐阅读