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 objeto não fornecer uma lista textual do código. Em vez disso, ele fornece uma coleção aninhada de objetos que representa os elementos de código. Por exemplo, cada namespace no código é representada 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 arquivo de fonte única. 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 de 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 How to: Use o objeto CodeModel para analisar o Códigodo Visual Basic. Para obter um exemplo de um Visual C# implementação, consulte Descobrindo o Código usando o modelo de Código (Visual TRANSLATION FROM VPE FOR CSHARP) e How to: 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 pode adicionar funções para CodeNamespace objetos em Visual Basic ou Visual C# porque somente Visual C++ definições de função de nível superior de recursos.
Os objetos de modelo de código principal estão listados na tabela a seguir. Clique nos links para ver a lista de métodos e propriedades para cada objeto.
Tipo |
Descrição |
---|---|
Representa uma construção de namespace em um arquivo de origem. |
|
Representa uma estrutura de código-fonte. |
|
Representa uma interface no código-fonte. |
|
Representa uma classe no código-fonte. |
|
Representa uma enumeração no código-fonte. |
|
Define uma construção de variável em um arquivo de origem. |
|
Representa um delegado no código-fonte. |
|
Representa um elemento de código ou a construção de um arquivo de origem. |
|
Modelos de um elemento de evento do código. |
|
Define uma construção de propriedade em um arquivo de origem. |
|
Define um atributo de um elemento de código. |
|
Modela o uso de instruções que importar namespaces. |
|
Representa uma construção de função em um arquivo de origem. |
|
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 namespace. O CodeNamespace objeto que representa esse espaço para nome pode conter vários 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 de 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 os que não.
Alguns elementos de código em um aplicativo representam tipos. Esses elementos de código derivam do CodeType objeto, bem como a 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. How to: Use o objeto CodeModel para analisar o Códigodo Visual Basicinclui um exemplo que localiza todas as classes em um projeto.
Como localizar elementos de código aninhados sob outros tipos de elementos de código depende do tipo de elemento de código aninhado. 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 usar para localizar os elementos aninhados de código do código de tipos de elemento.
Tipo |
Propriedade |
---|---|
CodeFunction |
|
CodeNamespace |
|
CodeProperty |
Elementos de código de referências externas
Seu código pode conter declarações de tipo de tipos definidos nas referências de projeto. (Referências de projeto são adicionadas por meio do Adicionar referências caixa de diálogo ou com o References.Add método de extensibilidade.) O Visual Basic o sistema de projeto não resolve o CodeTypeRef2 objetos que representam essas referências, além de seus nomes. Portanto, se você tentar usar qualquer uma das outras propriedades ou métodos da CodeElement2 objeto associado com a referência seja o Name propriedade, um "não implementado" exceção 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 renomeado, excluído 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
How to: Use o objeto CodeModel para analisar o Códigodo Visual Basic
Solucionando problemas de Visual Basic e a 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 TRANSLATION FROM VPE FOR CSHARP)