s implementações IDisposable.Dispose () devem ser idempotentes?

A estrutura Microsoft.NET fornece oIDisposable interface que requer uma implementação devoid Dispose() método. Seu objetivo é permitir a liberação manual ou baseada em escopo de recursos caros eIDisposable implementação pode ter sido alocada. Exemplos incluem coleções de bancos de dados, fluxos e identificadore

minha pergunta é: se a implementação doDispose() idempotent - quando chamada mais de uma vez na mesma instância, a instância deve ser 'descartada' apenas uma vez e as chamadas subseqüentes para não gerar exceções. Em Java, a maioria dos objetos com comportamento semelhante (novamente fluxos e conexões com bancos de dados vêm à minha mente como exemplos) são idempotentes para seusclose(), que passa a ser o análogo doDispose() método.

No entanto, minha experiência pessoal com .NET (e Windows Forms em particular) mostra que nem todas as implementações (que são parte da própria estrutura .NET) são idempotentes, de modo que as chamadas subseqüentes a esses lançam umObjectDisposedException. Isso realmente me confunde sobre como a implementação de um objeto descartável deve ser abordada. Existe uma resposta comum para o cenário ou depende do contexto concreto do objeto e de seu uso?

questionAnswers(8)

yourAnswerToTheQuestion