Compartilhar via


Visão geral do objeto CodeModel para Visual Basic e C# aplicativos

Talvez você precise programaticamente examinar a estrutura do seu código em um Visual Basic ou Visual C# aplicativo.Talvez você gostaria de saber os espaços para nome definidos em seu aplicativo e suas relações de aninhamento.Como alternativa, você talvez queira criar um documento que lista as classes e seus membros públicos como base para a documentação.

O CodeModel2 é um objeto de extensibilidade geral que fornece acesso ao código em um aplicativo.O CodeModel2 não fornece uma lista textual do código objeto.Em vez disso, ele fornece uma coleção aninhada de objetos que representa os elementos de código.Por exemplo, cada espaço para nome no código é representado por um CodeNamespace objeto.O CodeModel2 objeto associado a um projeto é acessado pela CodeModel propriedade.

O FileCodeModel2 é um objeto de extensibilidade geral que fornece acesso ao código em um único arquivo de origem.Cada arquivo de origem em um aplicativo é representado por um ProjectItem o objeto e o FileCodeModel2 objeto associado a um item de projeto é encontrado na FileCodeModel propriedade.

Tanto o CodeModel2 e o FileCodeModel2 objetos fornecem um CodeModel2.CodeElements e FileCodeModel.CodeElements propriedade, respectivamente, que é uma coleção de CodeElement2 objetos.Visual Basice Visual C# suporte a CodeModel2 e FileCodeModel objetos maneiras ligeiramente diferentes.Para obter um exemplo de um Visual Basic implementação, consulte Descobrindo o código usando o modelo de código (Visual Basic) e Como: usar o objeto CodeModel para analisar o código de Visual Basic.Para obter um exemplo de um Visual C# implementação, consulte Descobrindo o código usando o modelo de código (Visual C#) e Como: criar uma classe C# usando o objeto CodeModel.

Alguns idiomas não implementam todo o Visual Studio modelo de código.Tópicos da Ajuda destaque exceções quando existirem.A maioria das diferenças entre implementações do modelo de código são devido a diferenças funcionais entre os idiomas.Por exemplo, você não é possível adicionar funções para CodeNamespace objetos em Visual Basic ou Visual C# porque somente Visual C++ apresenta definições de função de nível superior.

Os objetos de modelo de código principal são listados na tabela a seguir.Clique nos links para ver a lista de métodos e propriedades para cada objeto.

Tipo

Descrição

CodeNamespace

Representa uma construção de namespace em um arquivo de origem.

CodeStruct2

Representa uma estrutura no código-fonte.

CodeInterface2

Representa uma interface no código-fonte.

CodeClass2

Representa uma classe no código-fonte.

CodeEnum

Representa uma enumeração no código-fonte.

CodeVariable2

Define uma construção de variável em um arquivo de origem.

CodeDelegate2

Representa um delegado no código-fonte.

CodeElement2

Representa um elemento de código ou a construção de um arquivo de origem.

CodeEvent

Modela um elemento de evento do código.

CodeProperty2

Define uma construção de propriedade em um arquivo de origem.

CodeAttribute2

Define um atributo para um elemento de código.

CodeImport

Modela o uso de instruções que importar namespaces.

CodeFunction2

Representa uma construção de função em um arquivo de origem.

CodeParameter2

Define um parâmetro para uma função, propriedade e assim por diante.

Elementos de código aninhados

Elementos de código em um aplicativo são organizados em uma arquitetura aninhada.Por exemplo, o FileCodeModel2 de um projeto de item pode conter, no seu CodeElements coleção, um elemento de código para um espaço para nome.O CodeNamespace objeto que representa esse espaço para nome pode conter vários outros elementos de código que classes que representam seus Members propriedade.Cada CodeClass2 elemento, por sua vez, pode conter elementos de código que representam propriedades (CodeProperty2 objeto) e métodos (CodeFunction2 objeto).Os métodos para recuperar aninhados código elementos dependem do tipo de elemento de código e são descritos na próxima seção.

Categorias de elemento de código

O CodeElement2 classe é uma classe base que representa todos os elementos de código em um item de projeto (arquivo de origem).Muitas classes derivam de CodeElement2 para representar as construções em um aplicativo, inclusive namespaces, classes, propriedades, métodos e eventos.Há duas categorias expansivas de elementos de código — aqueles que representam os tipos e as que não.

Alguns elementos de código em um aplicativo representam tipos.Esses elementos de código derivam do CodeType objeto bem como o CodeElement2 objeto:

Você pode determinar se uma referência a um CodeElement2 objeto é um desses tipos, usando o IsCodeType propriedade.Para localizar os elementos de código aninhado desses tipos, use o Members propriedade, que retorna um CodeElements coleção.Como: usar o objeto CodeModel para analisar o código de Visual Basicinclui um exemplo que localiza todas as classes em um projeto.

Como localizar elementos de código aninhados em outros tipos de elementos de código depende do tipo de elemento de código aninhados.Por exemplo, porque uma propriedade tem apenas um Get e um Set método, o CodeProperty2 associado a uma propriedade do objeto tem Getter e Setter propriedades que retornam CodeFunction2 elementos.A lista a seguir mostra quais propriedades a serem usadas para localizar os elementos de código aninhado do código de tipos de elemento.

Tipo

Propriedade

CodeFunction

Parameters

CodeNamespace

Members

CodeProperty

Getter e Setter

Elementos de código de referências externas

Seu código pode conter declarações de tipo de tipos definidos nas referências do projeto.(Referências de projeto são adicionadas por meio do Add References caixa de diálogo ou com o References.Add método extensibilidade.) O Visual Basic o sistema de projeto não resolve o CodeTypeRef2 objetos que representam essas referências, além dos nomes.Portanto, se você tenta usar qualquer uma das outras propriedades ou métodos da CodeElement2 objeto associado a referência, diferente do Name propriedade, uma exceção "Não implementado" será lançada.Essas referências são chamadas de "nome do tipo somente" elementos de código.CodeTypeos objetos que representam as referências externas têm o InfoLocation propriedade definida como vsCMInfoLocationNone.

Erros do compilador e o objeto CodeModel

Quando você está escrevendo código que mantém referências a CodeElement2 objetos, você deve estar ciente de que o código de origem subjacente pode alterar enquanto estiver segurando a referência.O elemento de código pode ser excluído, renomeado ou envolvido em um erro do compilador.Quando isso acontece, chama o CodeElement2 objeto retornar a mensagem de erro "exceção de HRESULT: 0x80047E2C."

Consulte também

Tarefas

Como: usar o objeto CodeModel para analisar o código de Visual Basic

Solução de problemas de Visual Basic e extensibilidade do Visual C#

Conceitos

Descobrindo o código usando o modelo de código (Visual Basic)

Descobrindo o código usando o modelo de código (Visual C#)