0

メソッドを実装するためのルールの1つは、次のようにDispose述べています。

リソースがすでに破棄されている場合はObjectDisposedException、このタイプ(以外)のfromインスタンスメソッドをスローします。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;
    }
}
4

2 に答える 2

2

一般に、プロパティはフィールドのように機能する必要があるため(計算がほとんどまたはまったくなく、他の状態が変更されていない場合は複数の呼び出しで同じ値を返します)、完全な破棄チェックは必要ありませんが、定義されたパブリックメソッドにチェックを入れる必要があります。クラス。

于 2010-02-10T10:38:38.363 に答える
1

場合によります。破棄されたオブジェクトの呼び出しはエッジ条件であるため、通常、これらすべてのテストを追加することにより、通常の使用中にオブジェクトの効率を犠牲にすることはありません。ルールを読む正しい方法は次のとおりです。

Disposedでdisposedメソッドを呼び出すと例外が発生したり、望ましくない結果が生じたりする場合は、ObjectDisposedExceptionをスローします。

たとえば、クラスのDisposeメソッドが一部のフィールドをnullに設定する場合、。ObjectDisposedExceptionで失敗するのではなく、そのフィールドを使用してfromメソッド/プロパティをスローする必要がありNullReferenceExceptionます。

于 2011-04-11T23:12:13.677 に答える