Usando o CodeDOM

O CodeDOM fornece tipos que representam vários tipos comuns de elementos de código fonte.Você pode criar um programa que cria um modelo de código de fonte usando elementos CodeDOM para montar um gráfico de objeto.Este gráfico de objeto pode ser processado sistema autônomo código-fonte usando um gerador de código CodeDOM uma linguagem de programação com suporte.Também é possível usar o CodeDOM para compilar código-fonte em um assembly binário.

Alguns usos comuns para o CodeDOM incluem:

  • Geração de código de modelo: gerar código para ASP.NET, proxies de cliente de serviços XML da Web, assistentes de código, designers ou outros mecanismos de emitir código.

  • Compilação dinâmica: suporte à compilação de código em um ou vários idiomas.

Criando um gráfico de CodeDOM

The System.CodeDom namespace fornece classes para representar a estrutura lógica do código-fonte, independente da sintaxe da linguagem.

A estrutura do gráfico CodeDOM

A estrutura de um gráfico de CodeDOM é como uma árvore de recipientes.O mais alto, ou raiz, contêiner de cada gráfico CodeDOM compilável é um CodeCompileUnit. Todos os elementos do seu modelo de código fonte devem estar vinculados no gráfico por meio de uma propriedade de um CodeObject no gráfico.

Criando um modelo de código de fonte para um programa do exemplo Hello World

A instrução a seguir fornece um exemplo de como criar um gráfico de objeto CodeDOM que representa o código para um aplicativo Hello World simples.Para obter o código-fonte completo para esse exemplo de código, consulte o System.CodeDom.Compiler.CodeDomProvider tópico.

Criando uma unidade de compilar

O CodeDOM define um objeto chamado um CodeCompileUnit, que pode fazer referência a um gráfico de objeto CodeDOM que modela o código-fonte para compilar. A CodeCompileUnit possui propriedades para armazenar atributos, namespaces e assemblies.

Os provedores de CodeDom derivam o CodeDomProvider a classe contém métodos que processam o gráfico do objeto referenciado por um CodeCompileUnit.

Para criar um gráfico de objeto para um aplicativo simples, você deve montar o modelo de código fonte e referenciá-los de um CodeCompileUnit.

Você pode criar uma nova unidade de compilar com a sintaxe demonstrada neste exemplo:

Dim compileUnit As New CodeCompileUnit()

A CodeSnippetCompileUnit pode conter uma seção de código-fonte que já está no linguagem de destino, mas não pode ser processado para outro linguagem.

Definindo um namespace

Para definir um espaço para nome criar um CodeNamespace e atribua um nome para ele usando o construtor apropriado ou definindo seu Nomepropriedade .

Dim samples As New CodeNamespace("Samples")

Importando um namespace

Para adicionar uma diretiva de importação do namespace ao espaço para nome, adicione um CodeNamespaceImport que indica o espaço para nome para importar para o CodeNamespace.Imports coleção.

O código a seguir adiciona uma importação para o Sistema namespace to the Importações coleção de umCódigo namespace named samples:

samples.Imports.Add( New CodeNamespaceImport("System") )

Vinculando elementos de código para o gráfico do objeto

Todos os elementos de código que formam um gráfico de CodeDOM devem estar vinculados a CodeCompileUnit que é o elemento raiz da árvore por uma série de referências entre os elementos diretamente acessados a partir de propriedades do objeto raiz do gráfico. Defina um objeto a uma propriedade de um objeto de contêiner para estabelecer uma referência do objeto do contêiner.

The following statement adds the samples CodeNamespace to the Namespaces collection property of the root CodeCompileUnit.

compileUnit.Namespaces.Add( samples )

Definindo um tipo

Para declarar uma classe, estrutura, interface ou enumeração usando o CodeDOM, crie um novo CodeTypeDeclaratione atribua a ele um nome. O exemplo a seguir demonstra esse usando uma sobrecarga do construtor para conjunto o Nome propriedade:

Dim class1 As New CodeTypeDeclaration("Class1")

Para adicionar um tipo para um namespace, adicione um CodeTypeDeclaration que representa o tipo a ser adicionado ao espaço para nome para o Tipos de coleção de umCodeNamespace.

O exemplo a seguir demonstra como adicionar uma classe chamada class1 para um CodeNamespace named samples:

samples.Types.Add(class1)

Adicionar membros de classe uma classe

The System.CodeDom namespace Fornece uma variedade de elementos que podem ser usados para representar os membros da classe. Cada membro da classe pode ser adicionado ao Membros coleção de umCodeTypeDeclaration.

Definir um método de ponto de entrada de código para um executável

Se você estiver criando um código para um programa executável, é necessário indicar o ponto de entrada de um programa criando um CodeEntryPointMethod para representar o método no qual programa deve começar a execução.

O exemplo a seguir demonstra como definir um método de ponto de entrada que contém um CodeMethodInvokeExpression que chama sistema.Console.WriteLine para imprimir "Olá mundo!":

Dim start As New CodeEntryPointMethod()
Dim cs1 As New CodeMethodInvokeExpression( _
    New CodeTypeReferenceExpression("System.Console"), _
    "WriteLine", _
    New CodePrimitiveExpression("Hello World!") )
start.Statements.Add(cs1)  

A demonstrativo a seguir adiciona um método do ponto de entrada chamado Start para o Membros coleção de class1:

class1.Members.Add( start )

Agora o CodeCompileUnit chamada CompileUnit contém o gráfico de CodeDOM para um programa de Hello World simples. Para obter informações sobre como gerar e compilar o código de um gráfico de CodeDOM, consulte Gerando código-fonte e compilando um programa de um gráfico de CodeDOM.

Obter mais informações sobre a criação de um gráfico de CodeDOM

O CodeDOM oferece suporte aos vários tipos comuns de código elementos encontrados em linguagens de programação que suportam o common linguagem tempo de execução.O CodeDOM não foi projetado para fornecer elementos para representar todos os recursos de linguagem de programação possíveis.Código que não pode ser representado com com facilidade com elementos de CodeDOM pode ser encapsulado em um CodeSnippetExpression, um CodeSnippetStatement, um CodeSnippetTypeMember, ou um CodeSnippetCompileUnit. No entanto, trechos de código não podem ser traduzidos para outros idiomas automaticamente, o CodeDOM.

Para obter a documentação para a cada um dos tipos de CodeDOM, consulte a documentação de referência para o System.CodeDom espaço para nome.

Para um gráfico rapidamente localizar o elemento de CodeDOM que representa um tipo específico de elemento de código, consulte o Referência rápida codeDOM.