哪些.NET Framework类实现IDisposable

时间:2011-05-17 17:29:19

标签: .net idisposable

这似乎必须在某处记录,但我找不到任何地方。也许我的谷歌正在削弱。

2 个答案:

答案 0 :(得分:10)

您意识到这取决于您所谓的 .NET Framework类。您可能想要指定要查找的程序集。有了这些信息,您可以加载这些程序集并使用反射列出在给定程序集中实现IDisposable的所有公共类型。我们以系统程序集为例:

class Program
{
    static void Main()
    {
        var types = Assembly
            .Load("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
            .GetTypes()
            .Where(t => typeof(IDisposable).IsAssignableFrom(t))
            .OrderBy(t => t.Name);
        foreach (var type in types)
        {
            Console.WriteLine(type);
        }
    }
}

答案 1 :(得分:1)

为什么要在工具IDisposable中列出所有类的列表?似乎更相关的问题是“如何判断一个类是否实现IDisposable?”如果您需要文档,MSDN将告诉您给定类所实现的接口。如果你需要在编译时知道,如果你试图包装一个不是在IDisposable块中实现using的类的实例的对象,编译器会对你大喊大叫。如果您需要在运行时知道,可以使用var disposable = obj as IDisposable并检查disposable是否为null

如果您有一个想要了解的特定程序集,可以使用反射来检查其类型并测试这些类型是否实现IDisposable(使用

typeof(IDisposable).IsAssignableFrom(type)

其中type是您从某些Type加载的Assembly个实例。