我正在为那些知道/有权访问它的人使用第三方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)
Run Code Online (Sandbox Code Playgroud)
以上所有内容均来自VS2010中的F12/Go到定义/对象浏览器.现在,当我尝试使用此代码时:
(new Session()).Dispose();
Run Code Online (Sandbox Code Playgroud)
这不编译...标准编译器错误 - 没有定义/扩展方法'Dispose'可以找到.
这怎么可能???他们制作了一个装配并明确编辑了它的元数据?
我不知道在法律上是否可以隐藏(排除)公共方法....
Joe*_*nos 17
这称为显式接口实现.该课程写成:
class Session : IDisposable {
void IDisposable.Dispose() {
// whatever
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的变量属于类型IDisposable
,则只能调用它,例如:
IDisposable mySession = new Session();
mySession.Dispose();
Run Code Online (Sandbox Code Playgroud)
或者通过铸造:
((IDisposable)mySession).Dispose();
Run Code Online (Sandbox Code Playgroud)
或者使用一个using
语句,它Dispose
在完成时自动调用(这仅适用于IDisposable
,并且通常是处理实现此接口的任何对象的最佳实践):
using (var session = new Session()) { }
Run Code Online (Sandbox Code Playgroud)