Quando e perché si dovrebbero creare classi in fase di runtime?

5

Ho letto molti articoli sulla creazione di tipi e classi dinamici in fase di esecuzione. Ad esempio, la classe TypeBuilder in C # consente di creare tipi dinamici. Python ha questa funzione di tipo con cui è possibile creare classi dinamiche. Ho sicuramente delle buone informazioni su come dovrei creare una classe in fase di esecuzione, ma non trovo abbastanza informazioni sul perché dovrei farlo.

Che cos'è uno scenario in cui si sarebbe costretti a creare tipi in fase di runtime?

    
posta King 20.01.2012 - 12:55
fonte

5 risposte

5

Linea Mock framework NMock (per generare classi di simulazione in scenari di test unitari) fai questo.

Un'altra applicazione che posso pensare potrebbe essere uno strumento generico di database che genera classi in fase di esecuzione per ogni tabella nel DB (ovviamente, potrebbero esserci soluzioni migliori a questo scopo).

In C #, ogni volta che hai il requisito di costruire una funzione in fase di esecuzione (perché, ad esempio, l'utente è in grado di immettere una funzione definita da solo nella tua applicazione), avrai bisogno di una classe dinamica per questo scopo poiché in C # le funzioni non possono vivere "da sole".

E un'altra applicazione che conosco sono i wrapper COM dinamicamente creati in C # 4.0 per ogni componente COM. Fino al C # 3.5, era necessario prima generare un wrapper di libreria di tipi che doveva essere compilato prima di poterlo usare. Con C # 4.0 e la parola chiave dynamic , questo non è più necessario, il wrapper può essere costruito in fase di esecuzione dal framework ed è possibile scrivere il codice che chiama i metodi di tali classi.

    
risposta data 20.01.2012 - 13:12
fonte
2

TypeBuilder e altre entità di System.Reflection.Emit spazio dei nomi vengono utilizzati per creare il codice di linguaggio intermedio (IL). Il primo utilizzo che mi viene in mente è per i compilatori, ma ho visto altri scenari in cui Reflection semplice non era abbastanza, e dovevi usare Emit nel tuo codice (purtroppo, non ricordo dove).

Si noti che non è la stessa cosa di dynamic word in .NET Framework 4, che è utile quando si interagisce con linguaggi dinamici come JavaScript.

    
risposta data 20.01.2012 - 13:13
fonte
1

Puoi anche leggere questo articolo . Soprattutto la sezione Reflection emette - ha poche sottosezioni, l'una con l'altra è più ottimizzata. :)

    
risposta data 20.01.2012 - 13:55
fonte
1

In Python dovresti creare una classe e / o un tipo (metaclasse) ogni volta che hai una situazione in cui non puoi generare la suddetta classe o tipo quando scrivi il codice.

I due esempi che ci vengono in mente sono le classi di database (una classe per tabella, e non si conosce il layout della tabella prima del tempo), e consentendo il codice utente nella propria applicazione.

È fondamentalmente un altro strumento (avanzato) con cui lavorare, ma se hai la possibilità di scrivere la lezione prima del tempo, è meglio farlo in quel modo.

    
risposta data 20.01.2012 - 22:29
fonte
0

Scenario possibile:

un qualche tipo di cache dinamica per la memorizzazione di un set di dati pesantemente interconnesso che per qualche motivo è rappresentato come singoli oggetti per voce?

    
risposta data 20.01.2012 - 13:23
fonte

Leggi altre domande sui tag