正确实施一次性模式-自动实现的属性

问题描述 投票:0回答:2

[实现Dispose方法的规则之一说:

已经处置资源时,从此类实例方法(ObjectDisposedException之外)抛出Dispose。该规则不适用于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;
    }
}
.net idisposable automatic-properties
2个回答
2
投票

通常,属性应像字段一样工作(很少或不进行计算,如果没有其他状态发生变化,则在多次调用中返回相同的值),因此它们不需要完全处理检查,但应对定义的公共方法进行检查在你班上。


1
投票

取决于。调用已处置的对象是一个边缘条件,因此您通常不希望通过添加所有这些测试来牺牲常规使用期间对象的效率。读取规则的正确方法是:

如果在Disposed上调用已处置的方法会导致异常或产生不良后果,则抛出ObjectDisposedException

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

© www.soinside.com 2019 - 2024. All rights reserved.