【发布时间】:2015-04-03 16:15:32
【问题描述】:
.NET BinaryReader/BinaryWriter 类可以通过指定一个Encoding 来构造,以用于与String 相关的操作。
我正在使用扩展方法实现自定义字符串格式,但仍会以尊重在实例化 BinaryReader/Writer 时指定的 Encoding 的方式实现它们。
似乎没有办法从读取器/写入器检索编码,即使从他们的类继承也是如此。我只能从他们那里继承来通过重新创建他们的所有构造函数来拦截传递的编码。我查看了.NET source code,它仅用于实例化解码器类(在BinaryReader 的情况下),但我也无法访问该类。
我会输给这些课程的缺点吗?我可以通过反射入侵它们吗?
【问题讨论】:
-
好的,你是对的。不过,WriteString 方法似乎明确忽略了它(根据 MSDN)。
-
如果在您的场景中子类化和拦截构造函数中的编码甚至是远程可行的,我更喜欢它而不是潜在的不稳定反射黑客。 (我什至不确定这是否可能,因为我在 Decoder 类中没有看到任何 Encoding 引用。)
-
你能解释一下为什么你的扩展方法需要自己操作 BinaryReader/BinaryWriter 吗? ReadString/WriteString 方法应该翻译编码,所以如果你的扩展方法对传入和传出这些方法的字符串进行操作,在我看来你不必担心吗?
-
这些类的设计假设您不能不知道这一点。因为创建阅读器或编写器的是您的代码,而不是框架的代码。也许这个假设不正确,但我们没有很多 SO 用户要求解决方法。不要丢失您需要的信息。
-
@DebugErr 也许与其做扩展方法,不如为 BinaryReader/BinaryWriter 编写一个封装附加逻辑的包装类,并使用该类代替?
标签: c# .net binaryreader binarywriter