C# IntelliSense

O C# IntelliSense é um auxílio de conclusão do código específico a um idioma. Ele está disponível para você quando você escreve código C# no editor de código e o depura na janela Comando do modo Immediate.

Listas de conclusão

As listas de preenchimento do IntelliSense no C# contêm tokens de Listar Membros, Completar Palavra e muito mais. Ele fornece acesso rápido a:

  • Membros de um tipo ou namespace

  • Variáveis, comandos e nomes de funções

  • Snippets de código

  • Palavras-chave de linguagem

  • Métodos de extensão

As listas de conclusão em C# filtram tokens irrelevantes e pré-selecionam tokens com base no contexto. Para obter mais informações, consulte Listas de conclusão filtradas.

Snippets de código em listas de conclusão

No C#, a lista de preenchimento inclui snippets de código para ajudá-lo a inserir com facilidade corpos de código predefinidos no programa. Os snippets de código são exibidos na lista de conclusão como texto de atalho do snippet. Para obter mais informações sobre os snippets de código disponíveis no C# por padrão, consulte Snippets de código do C#.

Palavras-chave de linguagem em listas de conclusão

A lista de conclusão inclui palavras-chave da linguagem C# para ajudá-lo a inseri-las em seu programa. Para obter mais informações sobre palavras-chave da linguagem C#, consulte Palavras-chave do C#.

Métodos de extensão em listas de conclusão

No C#, a lista de conclusão inclui métodos de extensão que estão no escopo.

Os métodos de extensão usam um ícone diferente dos métodos de instância. Quando um método de instância e um método de extensão com o mesmo nome estão no escopo, a lista de preenchimento exibe o ícone do método de extensão.

Observação

Para objetos String. a lista de conclusão não exibe todos os métodos de extensão.

Listas de preenchimento filtradas

O IntelliSense remove membros desnecessários da lista de preenchimento usando filtros. O C# filtra as listas de preenchimento exibidas para estes itens:

  • Interfaces e classes base: o IntelliSense remove automaticamente itens desnecessários das listas de conclusão de interface e de classe base. Essa remoção inclui listas de bases de declaração de classe e de interfaces, e listas de restrição. Por exemplo, enumerações não aparecem na lista de conclusão para classes base, pois enumerações não podem ser usadas para as classes base. A lista de conclusão de classes base contém apenas interfaces e namespaces. Se você selecionar um item na lista e, em seguida, digitar uma vírgula, o IntelliSense removerá as classes base da lista de conclusão. Ele faz isso porque o C# não oferece suporte a herança múltipla. O mesmo comportamento também ocorre em cláusulas de restrição.

  • Atributos: ao aplicar um atributo a um tipo, a lista de conclusão é filtrada para que ela tenha somente os tipos que descendem dos namespaces que contêm esses tipos. Por exemplo, Attribute.

  • Cláusulas catch: somente palavras-chave try-catch válidas aparecem na lista de conclusão.

  • Inicializadores de objeto: somente os membros que podem ser inicializados aparecem na lista de conclusão.

  • Nova palavra-chave: ao digitar new e, em seguida, pressionar a tecla Espaço, uma lista de conclusão é exibida. O IntelliSense seleciona automaticamente um item na lista, com base no contexto em seu código. Por exemplo, o IntelliSense seleciona automaticamente itens na lista de conclusão para declarações e para instruções return em métodos.

  • Palavra-chave enumeração: ao pressionar a tecla Espaço após um sinal de igual para uma tarefa de enumeração, uma lista de conclusão será exibida. O IntelliSense seleciona automaticamente um item na lista, com base no contexto em seu código. Por exemplo, o IntelliSense seleciona automaticamente os itens na lista de conclusão depois que você digita a palavra-chave return e quando faz uma declaração.

  • Operadores as e is: o IntelliSense exibe automaticamente uma lista de conclusão filtrada quando você pressiona a tecla Espaço depois de digitar a palavra-chave as ou is.

  • Eventos: ao digitar a palavra-chave event, a lista de conclusão conterá apenas os tipos de delegado.

  • Ajuda de parâmetro: o IntelliSense classifica automaticamente para a primeira sobrecarga de método que corresponde aos parâmetros, conforme eles são inseridos. Se houver várias sobrecargas de método disponíveis, será possível usar as setas para cima e para baixo para navegar para a próxima sobrecarga possível na lista.

Membros usados mais recentemente

O IntelliSense lembra os membros selecionados recentemente na caixa pop-up Listar Membros quanto à conclusão automática de nome de objeto. Na próxima vez que você usar a Lista de Membros, os membros usados mais recentemente serão mostrados na parte superior. O IntelliSense limpa o histórico dos membros usados mais recentemente entre cada sessão do Visual Studio.

override

Ao digitar substituição e, em seguida, pressionar a tecla Espaço, o IntelliSense exibe todos os membros da classe base válidos que podem ser substituídos em uma caixa de listagem pop-up. Digitar o tipo de retorno do método após override solicitará que o IntelliSense mostre apenas os métodos que retornam o mesmo tipo. Se o IntelliSense não conseguir encontrar nenhuma correspondência, ele exibirá todos os membros da classe base.

IntelliSense aprimorado com a inteligência artificial

O Visual Studio IntelliCode fornece listas de conclusão do IntelliSense aprimoradas com inteligência artificial. O IntelliCode prevê a API mais provavelmente correta a ser usada, em vez de apenas apresentar uma lista de membros em ordem alfabética. Ele usa os seus padrões e contexto de código atuais para fornecer a lista dinâmica.

Geração automática de código

Adicionar usando

A operação Adicionar usando do IntelliSense adiciona automaticamente diretivas using necessárias em seu arquivo de código. Esse recurso permite que você mantenha o foco no código que está sendo escrito, em vez de precisar mudar o foco para outra parte do código.

Para iniciar a operação Adicionar usando, posicione o cursor em uma referência de tipo que não pode ser resolvida. Por exemplo, quando você cria um aplicativo de console e, em seguida, adiciona XmlReader ao corpo do método Main, uma linha sublinhada vermelha aparece nessa linha de código, porque a referência de tipo não pode ser resolvida. Em seguida, você pode invocar a operação Adicionar usando por meio do menu Ações Rápidas. O item de menu usando <namespace> fica visível somente quando o cursor é posicionado na referência não resolvida.

Neste exemplo, para adicionar automaticamente a diretiva ao seu código, selecione o ícone da lâmpada de erro e, em seguida, escolha usando System.Xml;.

Captura de tela que mostra uma operação Adicionar usando com uma imagem de visualização.

Adicionar diretivas using ausentes quando colar

O IntelliSense pode adicionar automaticamente diretivas using ausentes ao seu código quando você cola um tipo no arquivo de código. Esse recurso economiza seu tempo automatizando a tarefa de adicionar diretivas using ausentes ao colar um tipo em um arquivo.

Para habilitar este recurso:

  1. Selecione Ferramentas>Opções.
  2. Selecione Editor de texto>C# (ou Visual Basic) >Avançado no painel esquerdo.
  3. Em Usando diretivas, selecione Adicionar diretivas usando ausentes ao colar.

Remover e classificar usos

A opção Remover e Classificar Usos classifica e remove as declarações using e extern sem alterar o comportamento do código-fonte. Ao longo do tempo, os arquivos de origem poderão ficar muito grandes e ser difíceis de ler devido a diretivas using desnecessárias e desorganizadas. A opção Remover e Classificar Usos compacta o código-fonte ao remover as diretivas using não utilizadas e melhora a legibilidade com sua classificação.

Para usar essa opção, selecione Editar>IntelliSense>Classificar Usos na barra de menus ou clique com o botão direito do mouse no editor de código e selecione Remover e Classificar Usos.

Implementar interface

O IntelliSense fornece uma opção para ajudá-lo a implementar uma interface enquanto você trabalha no editor de código. Normalmente, para implementar uma interface corretamente, é necessário criar uma declaração de método para cada membro da interface na classe. Depois de digitar o nome de uma interface na declaração de classe, o IntelliSense exibe uma lâmpada de Ações Rápidas A lâmpada oferece a opção de implementar a interface automaticamente, usando a nomenclatura explícita ou implícita. Na nomenclatura explícita, as declarações de método levam o nome da interface. Na nomenclatura implícita, as declarações de método não indicam a interface à qual pertencem. Um método de interface explicitamente nomeado só pode ser acessado por meio de uma instância de interface, e não por meio de uma instância de classe. Para obter mais informações, consulte Implementação explícita da interface.

A implementação da interface gera o número mínimo de stubs de método necessários para atender à interface. Se uma classe base implementar partes da interface, os stubs não serão regenerados.

Implementar classe base abstrata

O IntelliSense fornece uma opção para ajudá-lo a implementar membros de uma classe base abstrata automaticamente enquanto estiver trabalhando no editor de códigos. Normalmente, para implementar membros de uma classe base abstrata, é necessário criar uma nova definição de método para cada método da classe base abstrata na classe derivada. Após digitar o nome de uma classe base abstrata em uma declaração de classe, o IntelliSense exibe uma lâmpada Ações Rápidas. A lâmpada oferece a opção de implementar os métodos de classe base automaticamente.

Os stubs de método gerados pelo recurso Implementar Classe Base Abstrata são modelados pelo trecho de código definido no arquivo MethodStub.snippet. Os snippets de código são modificáveis. Para obter mais informações, consulte Passo a passo: criar um snippet de código no Visual Studio.

Gerar com base no uso

O recurso Gerar com Base no Uso permite usar classes e membros antes de defini-los. Você pode gerar um stub para qualquer classe, construtor, método, propriedade, campo ou enumeração que você deseja usar, mas que ainda não foram definidos. É possível gerar novos tipos e membros sem sair do local atual no código. Fazer isso minimiza a interrupção do fluxo de trabalho.

Uma linha sublinhada vermelha é exibida em cada identificador indefinido. Ao passar o ponteiro do mouse sobre o identificador, uma mensagem de erro é exibida em uma dica de ferramenta. Para exibir as opções apropriadas, você pode usar um dos seguintes procedimentos:

  • Selecione o identificador indefinido. Uma lâmpada de erro de Ações Rápidas é exibida abaixo do identificador. Selecione a lâmpada de erro.

  • Selecione o identificador indefinido e, em seguida, pressione Ctrl+Ponto (.).

  • Clique com o botão direito do mouse no identificador indefinido e, em seguida, selecione Ações Rápidas e Refatorações.

Podem aparecer as seguintes opções:

  • Gerar propriedade

  • Gerar campo

  • Gerar método

  • Gerar classe

  • Gerar novo tipo (para uma classe, um struct, uma interface ou enumeração)

Gerar manipuladores de eventos

No editor de códigos, o IntelliSense pode ajudá-lo a vincular métodos (manipuladores de eventos) a campos de evento.

Ao digitar o operador += após um campo de evento em um arquivo .cs, o IntelliSense mostra a opção de pressionar a tecla Tab. Isso insere uma nova instância de um delegado que aponta para o método que manipula o evento.

Captura de tela que mostra um método de manipulador de eventos de gancho solicitado.

Se você pressionar a tecla Tab, o IntelliSense concluirá a instrução para você automaticamente e exibirá a referência do manipulador de eventos como um texto selecionado no editor de códigos. Para concluir o vínculo automático de evento, o IntelliSense solicita que você pressione a tecla Guia novamente para criar um stub vazio para o manipulador de eventos.

Captura de tela que mostra um método de manipulador de eventos gerado.

Se você pressionar a tecla Tab novamente, o IntelliSense adiciona um stub de método com a assinatura correta e posicionará o cursor no corpo do manipulador de eventos.

Se um novo delegado criado pelo IntelliSense referenciar um manipulador de eventos existente, o IntelliSense comunicará essas informações na dica de ferramenta. Em seguida, você pode modificar essa referência; o texto já está selecionado no editor de códigos. Caso contrário, o vínculo automático de evento estará concluído.

Observação

Use o comando Navegação Regressiva no menu Exibir (Ctrl+-) para retornar à instrução de vínculo de evento.