5

我正在为那些知道/有权访问它的人使用第三方 API dll,bloomberg SAPI。

这是我的问题:

[ComVisible(true)]
public interface IDisposable     
{ //this is from mscorlib 2.0.0.0 - standard System.IDisposable
    void Dispose();
}

public abstract class AbstractSession : IDisposable {}//method signatures and comments

public class Session : AbstractSession {} //method signatures and comments (from assembly metadata)

以上所有内容均来自VS2010中的F12 / Go to definition / object browser。现在,当我尝试使用此代码时:

(new Session()).Dispose();

这不会编译... 标准编译器错误 - 找不到定义/扩展方法“Dispose”。

这怎么可能???他们制作了一个程序集并明确编辑了它的元数据?

我不知道隐藏(排除)公共方法是否合法......

4

1 回答 1

18

这称为显式接口实现。类是这样写的:

class Session : IDisposable {
    void IDisposable.Dispose() {
        // whatever
    }
}

如果您的变量是 type ,您只能调用它IDisposable,例如:

IDisposable mySession = new Session();
mySession.Dispose();

或通过铸造:

((IDisposable)mySession).Dispose();

或者使用一个using语句,它Dispose在完成时自动调用(这仅特定于IDisposable,并且通常是处置任何实现此接口的对象的最佳实践):

using (var session = new Session()) { }
于 2013-08-02T18:31:35.333 回答