如何隐藏dispose方法

本文关键字:dispose 方法 隐藏 何隐藏 | 更新日期: 2023-09-27 18:25:56

我正在使用第三方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/转到定义/对象浏览器。现在,当我尝试使用这个代码时:

(new Session()).Dispose();

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

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

我不知道在法律上是否可以隐藏(排除)公共方法。。。。

如何隐藏dispose方法

这被称为显式接口实现。该类的编写方式如下:

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

只有当变量类型为IDisposable时,才能调用它,例如:

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

或者通过铸造:

((IDisposable)mySession).Dispose();

或者使用using语句,该语句在完成时自动调用Dispose(这仅限于IDisposable,通常是处理实现该接口的任何对象的最佳实践):

using (var session = new Session()) { }