2010-04-19 2 views
3

При использовании Visual Studio легко извлечь интерфейс из класса, который я написал сам. Я нажимаю правой кнопкой мыши на классе и выбираю «Рефакторинг», затем выберите «Извлечь интерфейс».Извлечение интерфейса из .NEt Системные классы

Предположим, что я хотел создать оболочку ConfigurationManager и написать несколько тестов вокруг него. Быстрый способ сделать это - извлечь интерфейс из ConfigurationManager, щелкнув его правой кнопкой мыши, затем «Перейти к определению», а затем изнутри класса выберите «Рефакторинг», затем выберите «Извлечь интерфейс». Затем я просто создаю свой класс-оболочку, наследую от моего недавно созданного интерфейса, а затем реализую его, и у меня есть отличная отправная точка для моего класса-оболочки.

Однако извлечение интерфейса из любых системных классов .NET невозможно, возможно, потому, что это просто метаданные о классах, а не сами классы (или я делаю это неправильно).

Есть ли простой способ сделать то, что я пытаюсь выполнить? Я хочу, чтобы я не терял время, набрав то, что мне не нужно вводить.

Благодаря

ответ

3

Проблема в том, не так много, чтобы извлечь интерфейс - вы можете также сделать это «вручную» Но нет никакого способа, чтобы сказать CLR, что система определенный менеджер конфигурации реализует этот интерфейс, поскольку эта (мета) информация сохраняется в сборке фреймворка, которую вы не можете изменить.

EDIT:

Чтобы облегчить извлечение «вручную» вы можете щелкнуть правой кнопкой по типу и выберите «Перейти к определению». Visual Studio создает определение класса (без реализации) из метаданных. Затем вы можете использовать копию и вставить в новый файл. В любом случае вам все равно придется сделать некоторые изменения вручную

  • Заменить class ключевое слово по interface
  • удалить все непубличные способам/свойствам
  • удалить модификаторы доступа public и override (они являются недействительными в определение интерфейса)

Это можно сделать легко, используя поиск & заменить. Вы даже получите строки документации с таким подходом.

+0

Правильно, но я хотел знать, есть ли более быстрый способ извлечь интерфейс из любого класса .NET System (например, ConfigurationManager), не делая этого «вручную». – Thomas

+0

Спасибо Мартину. Знаете ли вы, что Resharper или любые другие VS-модули подключаются к извлечению классов из метаданных? – Thomas

+0

Извините, я не знаю о существующем плагине, хотя это не должно быть слишком сложно написать ... – MartinStettner