Существует ли список общего объекта, которые реализуют IDisposable для оператора использования?

Синглтон реализуется статическим методом. Люди, которые проводят модульное тестирование, избегают статических методов, потому что их нельзя высмеять или зарезать. Большинство людей на этом сайте являются большими сторонниками модульного тестирования. Общепринятым соглашением об их избежании является использование паттерна инверсии управления .

16
задан John Bubriski 23 June 2009 в 15:33
поделиться

9 ответов

Microsoft FxCop имеет правило проверка того, что вы используете IDisposbale в блоке using.

10
ответ дан 30 November 2019 в 16:00
поделиться

Следующий метод C # перечислит все типы IDisposable, обнаруженные в определенной сборке. (Используемые пространства имен: System, System.Collections.Generic, System.IO, System.Reflection)

  static void PrintDisposableTypesFromFile(String path)
  {
     Assembly assembly = Assembly.LoadFrom(path);
     foreach (Type type in assembly.GetTypes())
        if (type.GetInterface("IDisposable") != null)
           Console.WriteLine(type.FullName);
  }

Следующий метод C # использует предыдущий, чтобы сделать то же самое для всех сборок в каталоге и его подкаталогах, например "C : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 ":

  static void PrintDisposableTypesFromDirectory(DirectoryInfo dir, bool warn)
  {
     foreach (FileInfo file in dir.GetFiles("*.dll"))
     {
        try
        {
           PrintDisposableTypesFromFile(file.FullName);
        }
        catch (Exception ex)
        {
           if (warn)
           {
              Console.Error.WriteLine(
                 String.Format(
                    "WARNING: Skipped {0}: {1}",
                    new object[] { file.FullName, ex.Message }));
           }
        }
     }
     // recurse
     foreach (DirectoryInfo subdir in dir.GetDirectories())
        PrintDisposableTypesFromDirectory(subdir, warn);

  }

Я не уверен, что список всех одноразовых предметов очень полезен, но я использовал аналогичный код, чтобы найти другие интересные вещи, такие как полный список текста кодировки, поддерживаемые платформой .NET.

7
ответ дан 30 November 2019 в 16:00
поделиться

Если вы не уверены, реализует ли класс IDisposable или нет, заключите его в , используя блок . Если вы получили ошибку компиляции, просто удалите ее. Вы потеряете всего несколько секунд на набор текста.

4
ответ дан 30 November 2019 в 16:00
поделиться

Простой способ получить список типов, реализующих IDisposable, - это взломать Reflector, перейти к System.IDisposable , развернуть узел, а затем развернуть узел "Производные типы".

Чтобы убедиться, что ваш список полон, убедитесь, что все сборки, которые вы используете, были «открыты» в Reflector.

2
ответ дан 30 November 2019 в 16:00
поделиться

С ReSharper вы можете отображать все производные типы. Возможно, вы также сможете сделать это с помощью обозревателя объектов без ReSharper. Перейдите к определению интерфейса и найдите «показать наследников».

1
ответ дан 30 November 2019 в 16:00
поделиться

Быстрый и грязный способ проверить, реализует ли тип IDisposable, - это создайте его экземпляр и проверьте, есть ли у него функция-член Dispose (). Если это так, то вы можете быть на 99% уверены, что он реализует IDisposable.

0
ответ дан 30 November 2019 в 16:00
поделиться

В дополнение к другим ответам обратите внимание, что класс может реализовывать IDisposable, но не имеет Dispose в списке intellisense.

class MyClass :IDisposable
{
    void IDisposable.Dispose()
    {
        /* Stuff */
    }
}
3
ответ дан 30 November 2019 в 16:00
поделиться

Если вы используете Visual Studio, вы можете нажать F12 в объявлении типа, это приведет вас к экрану метаданных или определению класса (если у вас есть исходный код). Если у вас разные сочетания клавиш, щелкните правой кнопкой мыши и «перейдите к определению». Оттуда вы можете увидеть, что реализует класс. Я предлагаю сделать это для всех классов в первый раз, когда вы встретитесь с ними, чтобы «почувствовать», на что способен класс.

3
ответ дан 30 November 2019 в 16:00
поделиться

Возможно, посмотрите мой пост по этому поводу на http://www.lancemay.com/2010/01/idisposable-cheat-sheet/. Не уверен, что это то, что вы ищете, но, судя по исходному вопросу, похоже, что это может быть.

15
ответ дан 30 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: