如果一个类没有 Dispose 方法,它如何实现 IDisposable 接口?

5

FtpWebResponse 实现了 IDisposable 接口,但是它并没有 Dispose 方法。为什么会这样呢?

5个回答

10

我也没有看到任何Dispose方法。 - MCS
2
向下滚动至“显式接口实现”。 - blu
哦,它在那里,只是在“显式接口实现”下面更向下的地方。为什么会这样?当我有一个FtpWebResponse实例时,为什么这个方法在IntelliSense中不会显示出来? - MCS

9

它通过继承具有Dispose方法,但这是一个显式实现。要调用它,必须使用

((IDisposable)myObject).Dispose();

或者,当然也可以将其包装在using块中,因为它会为您执行显式调用。

2
正如其他人所说,它在基类中实现了,但你仍然可以看到它 - 你回答了为什么不能轻易地看到它。+1 如果明确提到它已经被显式地实现。 - Adam Houldsworth
2
使用显式实现的原因是什么? - MCS
@MCS,这是一个好问题!实际上,这听起来像是一个很好的问题,可以在stackoverflow上讨论为什么一些类具有显式的IDisposable实现,因为它掩盖了对象应该被处理的事实,对于那些不会每次使用类时都查阅文档的普通开发人员来说。 - Anthony Pegram

4
当您显式实现一个接口时,您将不会在清单中获得该方法。您将需要将该对象强制转换为已实现的接口才能访问该方法。
public class MyClass : IDisposable
{
    void IDisposable.Dispose()
    {
        throw new NotImplementedException();
    }
}

参考资料:http://msdn.microsoft.com/en-us/library/ms173157.aspx

该文档是关于使用ADO.NET访问SQL Server数据库的指南。它涵盖了连接到数据库、执行命令、处理结果集等方面的内容。此外,该文档还介绍了如何使用.NET Framework中提供的一些高级功能,例如事务和数据集。


3

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接