正在阅读:C#中的异常处理(三)C#中的异常处理(三)

2004-02-14 09:34 出处:PConline 作者:ivsee/CSDN 责任编辑:linjixiong
 
  你能够使用隐式转换操作符使问题变得更简单一些:
  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是一个公开的隐式接口实现而不是一个不公开的显示接口实现,这将避免强制转换)。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品