Question

One of the rules for implementing Dispose method says:

"Throw an ObjectDisposedException from instance methods on this type (other than Dispose) when resources are already disposed. This rule does not apply to the Dispose method because it should be callable multiple times without throwing an exception."

See: http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx

Does it mean, that if I want to implement properties correctly, I can not use auto-implemented properties? Do I need properties implement it like this one?

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

Solution

Generally, properties should act like fields (little or no computation, return the same value over multiple calls if no other state has changed), so they don't need the full dispose check, but you should put checks on defined public methods in your class.

OTHER TIPS

It depends. Calling a disposed object is an edge condition so you usually won't want to sacrifice your object's efficiency during regular use by adding all those tests. The correct way to read the rule is:

If calling a disposed method on a Disposed would cause an exception or have unwanted consequences, throw an ObjectDisposedException

E.g. If the Dispose method of your class sets some field to null you should throw an ObjectDisposedException from methods/properties using that field instead of failing with a NullReferenceException.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top