Quando e por que alguém deve criar classes em tempo de execução?

5

Eu li muitos artigos sobre a criação de tipos dinâmicos e classes em tempo de execução. Por exemplo, a classe TypeBuilder em C # permite criar tipos dinâmicos. O Python possui essa função de tipo, pela qual é possível criar classes dinâmicas. Tenho certamente boas informações sobre como criar uma aula em tempo de execução, mas não encontro informações suficientes sobre por que devo fazer isso.

Qual é o cenário em que alguém seria forçado a criar tipos em tempo de execução?

    
por King 20.01.2012 / 12:55
fonte

5 respostas

5

Linha de estruturas de simulação NMock (para gerar classes simuladas em cenários de teste de unidade) faça isso.

Outro aplicativo em que posso pensar pode ser uma ferramenta de banco de dados genérica gerando classes em tempo de execução para cada tabela no banco de dados (é claro, pode haver soluções melhores para essa finalidade).

Em C #, sempre que você tiver a obrigação de construir uma função em tempo de execução (porque, por exemplo, o usuário pode inserir uma função definida por ele mesmo em sua aplicação), você precisará de uma classe dinâmica para essa finalidade. desde em funções C # não pode viver "por conta própria".

E outro aplicativo que conheço são os wrappers COM criados dinamicamente no C # 4.0 para cada componente COM. Até C # 3.5, você precisava primeiro gerar algum wrapper de biblioteca de tipos que precisava ser compilado antes de poder usá-lo. Com o C # 4.0 e a palavra-chave dynamic , isso não é mais necessário, o wrapper pode ser construído em tempo de execução pelo framework e você pode escrever código que chama métodos dessas classes.

    
por 20.01.2012 / 13:12
fonte
2

TypeBuilder e outras entidades do namespace System.Reflection.Emit são usadas para criar o código Intermediary Language (IL). O primeiro uso que vem à mente é para os compiladores, mas eu vi outros cenários onde o Reflection simples não era suficiente, e você tinha que usar Emit em seu código (infelizmente, eu não lembro onde). / p>

Observe que não é a mesma coisa que dynamic word no .NET Framework 4, que é útil quando você interage com linguagens dinâmicas como JavaScript.

    
por 20.01.2012 / 13:13
fonte
1

Você também pode ler este artigo . Especialmente a seção Reflexão emitem - tem poucas subseções, cada uma é mais otimizada. :)

    
por 20.01.2012 / 13:55
fonte
1

No Python você criaria uma classe e / ou tipo (metaclasse) sempre que tiver uma situação em que não seja possível gerar a dita classe ou tipo ao escrever o código.

Os dois exemplos que vêm à mente são as classes do banco de dados (uma classe por tabela e você não conhece o layout da tabela antes do tempo) e permite o código do usuário em seu aplicativo.

É basicamente mais uma ferramenta (avançada) para trabalhar, mas se você tiver a opção de escrever a turma antes do tempo, é melhor fazê-lo dessa maneira.

    
por 20.01.2012 / 22:29
fonte
0

Cenário possível:

algum tipo de cache dinâmico para armazenar dataset muito interligado que, por alguma razão, é representado como objetos individuais por entrada?

    
por 20.01.2012 / 13:23
fonte