Когда пространство имен .NET реализуется компонентом .NET Framework? - PullRequest
17 голосов
/ 26 июля 2011

(Еще один вопрос из моей серии «Очевидно, я единственный идиот здесь».)

Когда мне нужно использовать класс из .NET Framework, я покорно просматриваю документацию, чтобы определить,соответствующее пространство имен, а затем добавьте директиву «using» в мой исходный код:

using System.Text.RegularExpressions;

Обычно я готов пойти на этом, но иногда Intellisense не распознает новый класс, и проект выигралне строить.Быстрая проверка в Object Browser подтверждает, что у меня правильное пространство имен.Разочарование наступает.

Использование HttpUtility.UrlEncode() включало добавление соответствующей директивы:

using System.Web;

Но для этого также требовалось добавить ссылку на компонент .NET Framework для System.Web, т. Е. Щелкнуть правой кнопкой мышив обозревателе решений выберите «Добавить ссылку» и добавьте System.Web на вкладке .NET.

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

(Для тех, кто любит оставаться после занятий и чистить ластики: Will Organize Usings>Удалить и Сортировать также удалить ссылки на компоненты, которые не используются в другом месте в проекте? Как вы удалите ненужные ссылки?)

Ответы [ 7 ]

24 голосов
/ 26 июля 2011

Проверьте эту ссылку для UrlEncode :

Пространство имен: System.Web

Сборка: System.Web (в System.Web.dll)

В строке Assembly указывается, на какую dll ссылаться.

7 голосов
/ 26 июля 2011

Вы заметите, что в документации (например, http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx) указано имя сборки / DLL, в которой должен быть найден класс, а также пространство имен класса.

Пространство имен: System.Web
Сборка: System.Web (в System.Web.dll)

Кстати, я знаю, что это может быть немного дорого, но Решарпер делает такие вещинамного проще. Если вы серьезный разработчик, вы можете подумать о вложении средств в лицензию. Для ластиков-чистильщиков Resharper добавляет удобный пункт «Найти код, зависящий от модуля» в меню правой кнопки мыши по ссылкам вОбозреватель решений. Это не совсем автоматическая очистка, но с ее помощью намного легче увидеть, используется ли что-то еще в вашем проекте.

6 голосов
/ 26 июля 2011

Документация определяет две вещи для любого типа:

  • Пространство имен типа (для директивы using)
  • Сборка , содержащий тип (это то, на что вы добавляете ссылку)

Чтобы взять пример, где эти два значения различаются, посмотрите документацию для Enumerable:

Пространство имен: System.Linq
Сборка: System.Core (в System.Core.dll)

3 голосов
/ 26 июля 2011

Если вы посмотрите документы MSDN, например,

http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx

В нем сообщается пространство имен и требуемой сборки.

2 голосов
/ 26 июля 2011

Во-первых, исправление вашей терминологии: то, на что вы ссылаетесь, называется «сборкой».Сборка содержит классы, которые принадлежат пространству имен.Пространство имен может охватывать несколько сборок.

Большинство сборок именуются так же, как и основное пространство имен, содержащееся в них.Например, System.Web существует в System.Web.dll.В документации также обычно указывается, на какую сборку нужно ссылаться.

1 голос
/ 26 июля 2011

Если вы переходите на MSDN для класса, который вы пытаетесь использовать.Обычно он сообщает сборке, в которой находится класс. Например, класс Regex находится в Assembly System (в System.dll) или класс HttpUtility находится в Assembly System.Web (в System.Web.dll).

Я считаю, что такие инструменты, как ReSharper, также помогают в этом и автоматически ссылаются на нужные вам сборки.

Я уверен, что вам придется вручнуюудалить неиспользуемые ссылки в проектах C #.В проектах VB.NET есть кнопка для отображения неиспользуемых ссылок, когда вы находитесь на странице свойств проекта.Я не вижу этого в проектах на C #.

1 голос
/ 26 июля 2011

Я думаю, что вы столкнулись с различием между c # и C здесь.Для сравнения: в C все, что вам нужно сделать, чтобы включить новую библиотеку, это включить ее в заголовок.

Это .net, вам нужно знать о 2 вещах:

  1. Пространство имен может охватывать более одной сборки / библиотеки DLL (это означает, что вы не можете получить ошибку компилятора в предложении using, поскольку на некоторые библиотеки DLL, поддерживающие это пространство имен, ссылаются - просто не те, которые вам нужны)
  2. Чтобы «увидеть» содержимое данной сборки, необходимо добавить ссылку на нее.Одно только использование using просто дает вам краткий синтаксис, так что вы можете написать HttpUtility.Encode () вместо System.Web.HttpUtility.UrlEncode (), вам нужно добавить ссылку, чтобы компилятор «знал»о классе.

Чтобы избежать вашей проблемы:

В документах MSDN обратите внимание на сборку, в которой находится класс, и убедитесь, что у вас есть ссылка насборка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...