IDisposableインタフェースを実装したクラスのDisposeってprotectedだったり、
privateだったりしますよね。
これって直接だと呼べないけど、usingを使うと呼べるはず。と思って作ってみたら
publicではないと、コンパイルエラーになった。なにか勘違いしていますか。
環境はVisualStudio2005です。
コンパイルエラーが出たのであれば,そのメッセージをちゃんとCopy & Pasteしてくださ
い。
おそらく,
private void Dispose () { /* ... */ }
しか書かなかったのでしょう。
インターフェイスを継承した場合,
・対応するメンバはpuclibかつ非静的である
・明示的に実装されている
のどちらかを満たさなければなりません。
インターフェイスに定義されているメソッドをprotected/privateにする場合,
明示的に実装したものと,protected/privateなメソッドの2つを用意する必要がありま
す。
# 実際には明示的に実装された物は委譲するだけですが。
すいません。以下エラーです。
エラー 1 'ConsoleApplication1.Test' はインターフェイス メンバ
'System.IDisposable.Dispose() を実装しません。'ConsoleApplication1.Test.Dispose
()' が public ではなく、static になっているか、または戻り値の型が正しくありません。
以下がテストクラスです。
class Test : IDisposable
{
private void Dispose() { }
}
明示的な実装とは? 調べてみました。以下でできました。
void IDisposable.Dispose()
{
this.Dispose();
}
明示的、実装知らなかったです。YuOさん、ありがとうございました!