你能够使用隐式转换操作符使问题变得更简单一些: public sealed class AutoTextReader : IDisposable { ... public static implicit operator AutoTextReader(TextReader target) { return new AutoTextReader(target); } ... } 这将允许你这样使用: using (AutoTextReader scoped = file.OpenText()) { scoped.TextReader.Read(source, 0, length); } struct :另一种选择 AutoTextReader有意使用为密封类,就想它的名字建议的,以用作本地变量。使用一个结构来代替类更加有意义: public struct AutoTextReader : IDisposable { // exactly as before } 使用一个结构代替类也提供给你几种自由优化。既然一个结构是一个值类型,它能构一直都不是空值。这意味着编译器必须对生成的finally程序块做空值的检测。并且,既然你不能继承于一个结构,它的运行时将和编译时的类型一致。这意味着编译器一般在生成的finally程序块中做强制转换并因而避免了一次装箱操作(特别的,如果Dispose是一个公开的隐式接口实现而不是一个不公开的显示接口实现,这将避免强制转换)。 |
正在阅读:C#中的异常处理(三)C#中的异常处理(三)
2004-02-14 09:34
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键