C# IntelliSense

C# IntelliSense — это помощь по завершению кода на языке. Он доступен при написании кода C# в редакторе кода и отладке его в командном окне режима интерпретации.

Списки завершения

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

  • члены типа или пространства имен;

  • имена переменных, команд и функций;

  • Фрагменты кода

  • Ключевые слова языка

  • Методы расширения

Списки завершения в C# отфильтровывают неуместные маркеры и маркеры предварительного выбора на основе контекста. Дополнительные сведения см. в разделе Фильтрованные списки завершения.

Фрагменты кода в списках завершения

В C# списки завершения содержат фрагменты кода, позволяющие легко вставлять предварительно определенные тела кода в программу. Фрагменты кода отображаются в списке завершения в виде текста ярлыка фрагмента. Дополнительные сведения о фрагментах кода, доступных в C# по умолчанию, см. в описании фрагментов кода C#.

Ключевые слова языка в списках завершения

Список завершения включает ключевое слово языка C#, которые помогут вам вставить их в программу. Дополнительные сведения о ключевых словах языка C# см. в разделе Ключевые слова C#.

Методы расширения в списках завершения

Список завершения в C# содержит методы расширения, которые находятся в области действия.

В методах расширения используется не такой значок, как в методах экземпляра. Если метод экземпляра и метод расширения с одинаковыми именами находятся в одной области, в списке завершения отображается значок метода расширения.

Примечание.

Для String объектов список завершения не отображает все методы расширения.

Фильтрованные списки завершения

IntelliSense удаляет ненужные элементы из списка завершения с помощью фильтров. C# фильтрует списки завершения по следующим элементам:

  • Интерфейсы и базовые классы: IntelliSense автоматически удаляет ненужные элементы из списков завершения интерфейса и базового класса, это удаление включает базы объявлений классов, списки интерфейсов и списки ограничений. Например, перечисления не отображаются в списке завершения для базовых классов, так как перечисления не могут использоваться для базовых классов. Список завершения базовых классов содержит только интерфейсы и пространства имен. Если выбрать элемент в списке и ввести ключ запятой, IntelliSense удаляет базовые классы из списка завершения. Это делается, так как C# не поддерживает несколько наследование. То же поведение также происходит для предложений ограничений.

  • Атрибуты. При применении атрибута к типу список завершения фильтруется таким образом, чтобы список содержал только те типы, которые спускаются от пространств имен, содержащих эти типы. Например, Attribute.

  • Предложения Catch: в списке завершения отображаются только допустимые ключевое слово try-catch.

  • Инициализаторы объектов: в списке завершения отображаются только элементы, которые можно инициализировать.

  • новое ключевое слово. При вводе newи нажатии клавиши ПРОБЕЛ появится список завершения. IntelliSense автоматически выбирает элемент в списке на основе контекста в коде. Например, IntelliSense автоматически выбирает элементы в списке завершения для объявлений и возвращаемых инструкций в методах.

  • перечисление ключевое слово. При нажатии клавиши ПРОБЕЛ после знака равенства для назначения перечисления появится список завершения. IntelliSense автоматически выбирает элемент в списке на основе контекста в коде. Например, IntelliSense автоматически выбирает элементы в списке завершения после ввода return ключевое слово и при создании объявления.

  • как и операторы: IntelliSense автоматически отображает отфильтрованный список завершения при нажатии клавиши ПРОБЕЛ после ввода as или is ключевое слово.

  • События. При вводе ключевое слово eventсписок завершения содержит только типы делегатов.

  • Справка по параметру: IntelliSense автоматически сортирует по первой перегрузке метода, которая соответствует параметрам при вводе. Если существует несколько перегрузок метода, можно использовать кнопки со стрелками вверх и вниз для перехода к следующей возможной перегрузке в списке.

Недавно использовавшиеся члены

IntelliSense запоминает элементы, которые вы недавно выбрали в диалоговом окне "Элементы списка" для автоматического завершения имени объекта. Когда вы откроете список членов в следующий раз, сверху будут отображаться элементы, которые недавно использовались. IntelliSense очищает журнал последних использованных элементов между каждым сеансом Visual Studio.

override

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

IntelliSense с возможностями искусственного интеллекта

Расширение Visual Studio IntelliCode предоставляет списки завершения IntelliSense с использованием искусственного интеллекта. IntelliCode предсказывает, какой API будет наиболее подходящим, а не просто возвращает список членов в алфавитном порядке. Оно формирует список динамически на основе текущего контекста вашего кода.

Автоматическое генерирование кода

Добавить директиву using

Операция Add using IntelliSense автоматически добавляет необходимые using директивы в файл кода. Эта функция позволяет поддерживать фокус на коде, который вы пишете, а не требовать переключения фокуса на другую часть кода.

Чтобы инициировать операцию "Добавить с помощью", поместите курсор на ссылку типа, которая не может быть разрешена. Например, при создании консольного приложения и последующем добавлении XmlReader в текст Main метода красная строка волнистой линии отображается в этой строке кода, так как ссылка на тип не может быть разрешена. Затем можно вызвать операцию "Добавить с помощью " в меню "Быстрые действия ". Элемент меню "Пространство имен>" <отображается только в том случае, если курсор находится в неразрешенной ссылке.

В этом примере для автоматического добавления директивы using в код выберите значок лампочки ошибки, а затем выберите system.Xml;.

Снимок экрана: операция

Добавлять отсутствующие директивы using при вставке

IntelliSense может автоматически добавлять недостающие директивы using в код при вставке типа в файл кода. Эта функция экономит время, автоматизируя задачу добавления недостающих директив using при вставке типа в файл.

Чтобы включить эту функцию:

  1. Выберите параметры инструментов>.
  2. Выберите текстовый редактор>C# (или Visual Basic) >Дополнительно на левой панели.
  3. В разделе "Директивы using" выберите "Добавить отсутствующие директивы using" для вставки.

Удаление и сортировка директив using

Параметр Удалить и сортировать директивы using позволяет сортировать и удалять объявления using и extern, не меняя поведение исходного кода. Со временем исходные файлы могут стать слишком большими и сложными для чтения из-за ненужных и неорганизованных using директив. Параметр Удалить и сортировать директивы using сжимает исходный код, удаляя неиспользуемые директивы using и улучшая читаемость путем их сортировки.

Чтобы использовать этот параметр, выберите "Изменить>параметры сортировки IntelliSense>Usings" в строке меню или щелкните правой кнопкой мыши редактор кода и выберите "Удалить и отсортировать с помощью".

Реализация интерфейса

IntelliSense предоставляет возможность реализовать интерфейс во время работы в редакторе кода. Обычно для правильной реализации интерфейса нужно создать объявление метода для каждого члена интерфейса в классе. После ввода имени интерфейса в объявлении класса IntelliSense отображает лампочку быстрых действий . Он позволяет выбрать вариант автоматической реализации интерфейса с помощью явного или неявного именования. При явном именовании объявления метода содержат имя интерфейса. В неявном именовании объявления метода не указывают интерфейс, к которому они относятся. Доступ к явно именованному методу интерфейса может осуществляться только через экземпляр интерфейса, а не через экземпляр класса. Дополнительные сведения см. в разделе Явная реализация интерфейса.

Реализация интерфейса создает минимальное количество заглушки методов, необходимых для удовлетворения интерфейса. Если базовый класс уже реализует часть интерфейса, заглушки не восстанавливаются.

Реализация абстрактного базового класса

IntelliSense предоставляет возможность автоматической реализации членов абстрактного базового класса при работе в редакторе кода. В обычном режиме для реализации членов абстрактного базового класса для каждого метода абстрактного базового класса в производном классе необходимо создать новое определение метода. После ввода имени абстрактного базового класса в объявлении класса IntelliSense отображает лампочку быстрых действий . Он дает возможность автоматической реализации методов базового класса.

Заглушки метода, создаваемые функцией Реализовать абстрактный базовый класс, моделируются фрагментом кода, определенным в файле MethodStub.snippet. Фрагменты кода можно изменять. Дополнительные сведения см. в пошаговом руководстве. Создание фрагмента кода в Visual Studio.

Создание в результате использования

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

Красная линия волнистой линии отображается под каждым неопределенным идентификатором. При наведении указателя мыши на идентификатор сообщение об ошибке появляется в подсказке. Чтобы отобразить соответствующие параметры, используйте одну из следующих процедур:

  • Выберите неопределенный идентификатор. Под идентификатором появляется значок быстрых действий в виде лампочки с ошибкой. Выберите лампочку ошибки.

  • Выберите неопределенный идентификатор и нажмите клавиши CTRL+Period (.).

  • Щелкните правой кнопкой мыши неопределенный идентификатор, а затем выберите быстрые действия и рефакторинг.

Могут появиться следующие параметры:

  • Сформировать свойство

  • Сформировать поле

  • Сформировать метод

  • Сформировать класс

  • Сформировать новый тип (для класса, структуры, интерфейса или перечисления)

Сформировать обработчики событий

В редакторе кода IntelliSense упрощает подключение методов (обработчиков событий) к полям событий.

Если ввести оператор += после поля события в файле CS, IntelliSense предложит нажать клавишу TAB. В результате будет вставлен новый экземпляр делегата, который указывает на метод, обрабатывающий событие.

Снимок экрана: запрошенный метод обработчика событий.

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

Снимок экрана: созданный метод обработчика событий.

При повторном нажатии клавиши TAB IntelliSense добавляет заглушку метода с правильной подписью и помещает курсор в текст обработчика событий.

Если новый делегат, созданный IntelliSense, ссылается на существующий обработчик событий, IntelliSense передает эти сведения в подсказке. Эту ссылку можно изменить — соответствующий текст уже выделен в редакторе кода. В противном случае автоматическое перехват событий завершено.

Примечание.

Чтобы вернуться к инструкции перехватчика событий, используйте команду "Перейти назад" в меню "Вид" (CTRL+-).