2010-02-10 49 views
0

一个实施Dispose方法的规则说:正确实施一次性模式 - 自动实现属性

这种类型的(除处置等),当资源已经布置“把从实例方法一的ObjectDisposedException此规则不不适用于Dispose方法,因为它应该可以多次调用而不会抛出异常。“

请参见:http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx

这是否意味着,如果我要正确实现的特性,我不能使用自动实现的属性?我需要属性像这样执行它吗?

private bool _property; 
    public bool Property 
    { 
     get 
     { 
      if(disposed) throw new ObjectDisposedException ("MyClass"); 
      return _property; 
     } 
     set 
     { 
      if(disposed) throw new ObjectDisposedException ("MyClass"); 
      _property=value; 
     } 
    } 

回答

2

一般来说,性能应该像场(很少或根本没有计算,如果没有其他国家已经改变了返回的多个调用相同的值),所以他们并不需要完整的处置检查,但你应该把检查班级中定义的公共方法。

+0

我同意。当你只是返回原始值时,比如整数,布尔值,颜色:不要去做一个完整的处理检查。但是,如果该属性返回某个在处置后无法合理使用的对象,请执行完整检查。 – Steven 2010-02-10 11:22:13

1

这要看情况。调用已处理的对象是一种边缘条件,因此通常不会在常规使用期间通过添加所有这些测试来牺牲对象的效率。 阅读规则正确的方法是:

如果调用一个设置在处置方法会导致异常或有不良后果,抛出的ObjectDisposedException

例如如果你的类的Dispose方法将某些字段设置为null,你应该使用该字段,而不是用NullReferenceException失败扔从方法/属性的ObjectDisposedException