0

ClientBase<T>クラスがインターフェイスを明示的に実装していることは理解してIDisposableいますが、なぜそれが明示的に行われたのかわかりません。 ClientBase は IDisposable メンバーを実装していません

MyClientから派生した場合、この方法でオブジェクトをClientBase<T>明示的に取得できません:Dispose

MyClient client = new MyClient();
client.Dispose();

基になるインターフェイスにキャストするか、usingステートメント デザイン パターンを使用してオブジェクトの有効期間を実装しない限り、次のようになります。

((IDisposable)client).Dispose();

MicrosoftがこのクラスのDisposeメソッドを公開し、開発者が明示的に呼び出すことができる場合に、明示的なインターフェイスの実装を介してこのクラスのメソッドを非表示にする利点は何ですか?

クラスClientBase<T>が競合するメソッド宣言を持つ 2 つの異なるインターフェイスを実装しているわけではないため、見逃しているものがない限り、この状況では明示的なインターフェイスの実装は不要であることがわかります.....

4

2 に答える 2

0

マイクロソフトがこのように実装した理由は次のとおりです。また、同じ状況で同じことを行うことをお勧めします。つまり、パブリックの Close メソッドを呼び出す必要があり、Dispose とまったく同じように動作します。

I使い捨て

close がこの分野の標準的な用語である場合は、Dispose() に加えてメソッド Close() を提供することを検討してください。その際、Close の実装を Dispose と同じにし、IDisposable.Dispose メソッドを明示的に実装することを検討することが重要です。

于 2015-11-24T11:42:56.457 に答える
0

最初の数年間、または .NET では、検出可能性のためにストリームで Dispose よりも Close が好まれていました。ストリームを開く場合は、Dispose ではなく Close メソッドを探す方が簡単であると考えられていました。

http://blogs.msdn.com/b/kimhamil/archive/2008/03/15/the-often-non-difference-between-close-and-dispose.aspx

于 2015-11-24T11:39:56.237 に答える