Socket.Dispose()
はアクセスできないメンバーです。しかし、我々は次のようにして、これをバイパスすることができます:どのようにC#でカプセル化を隠すのですか?
((IDisposible)Socket).Dispose()
つの質問:
- は、なぜこれが許可されていますか?
- これは内部的にどのように機能しますか?
Socket.Dispose()
はアクセスできないメンバーです。しかし、我々は次のようにして、これをバイパスすることができます:どのようにC#でカプセル化を隠すのですか?
((IDisposible)Socket).Dispose()
つの質問:
この機能は「明示的なインターフェイスの実装」と考えられます。これを使用すると、オブジェクトがインターフェイスに明示的にキャストされている場合にのみ、実装されたメソッドを呼び出すことができます。クラスは、廃棄(同じ仕事を達成閉じる())などのメソッドを実装するたびに、明示的にIDisposableインターフェイスを実装することをお勧めします
http://msdn.microsoft.com/en-us/library/aa288461(VS.71).aspx
:
は、ここでは、この上のチュートリアルです開発者は通常、Close()メソッドのみを参照しますが、Disposeメソッドは、Disposeメソッドが必要なフレームワークで使用するために、IDisposableインターフェイスを通じて引き続きアクセスできます。
場合によっては、Disposeを閉じるなどの別の名前で公開して、より読みやすいコードにすることができます。これらは、ファイルハンドルや接続など、「閉鎖」可能なもので、.NET Framework全体で表示されます。
編集:http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756
+1、しかし、あなたはこの勧告の参考資料を持っていますか?または、新しいクラスの例? System.IO.StreamにはDisposeとCloseの両方があります。 –
.NET Frameworkを作成したのと同じ人が書いた、.NET Framework Design Guidelinesという本にあります。 – AaronLS
いやを参照してください....例えば、ソケットのためにこの背後にあるものです、理にかなっていますか? thx –
この投稿をチェックしてください:http://stackoverflow.com/questions/280495/why-to-use-explicit-interface-implementation-to-invoke-a-protected-method –
私は理解できません。つまり、SocketはIDisposableを実装していますが、何らかの理由で、デザイナーはクラスの「公開API」に「Dispose()」メソッドを必要としませんでした。 Disposeを使用するには、ソケットをIDisposableにキャストする必要があります。 –