2010-11-19 17 views
5

Il nuovo framework (> 2.0) .NET fornisce miglioramenti alla generazione del codice?Generazione codice C# in .NET 4

Ho usato CodeDom in 2.0 e mi chiedo se la generazione del codice possa essere più semplice.

risposta

2

Dipende da ciò che si desidera ottenere.

Hai menzionato l'uso di CodeDom per generare codice: se stai cercando di generare metodi al volo, puoi utilizzare le espressioni LINQ (non riesco a pensare a un buon tutorial in cima alla mia testa ma solo a google per esso).

Le espressioni LINQ hanno il vantaggio di essere più facili da scrivere (nella mia esperienza), più veloci da generare (specialmente quando si scrive un'intera classe per incapsulare un singolo metodo) e molto veloci da eseguire.

Quello che segue è un frammento VB.Net di un'espressione LINQ che genera una funzione che prende in un controllo ASP.Net e restituisce la sua (protetto) Valore proprietà ViewState:

'generate a delegate that can access the protected control property "ViewState" 
'(by using LINQ expressions, we can avoid the performance hit of reflection) 
    Dim cntrlParam As ParameterExpression = Expression.Parameter(GetType(Control), "cntrl") 
    Dim vsPropertyAcessor As MemberExpression = Expression.Property(cntrlParam, "ViewState") 
    dim viewStateAccessor as Func(of Control, StateBag) = Expression.Lambda(vsPropertyAcessor, cntrlParam).Compile() 

Si può quindi invocare il funzione generata in questo modo:

viewStateAccessor (myCntrl)("my_vs_key") 

Se il vostro cercando di fare la generazione di codice statico, quindi controllare la caratteristica text template di VS.

+0

In aggiunta a ciò, in .NET4 include ancora più supporto per l'espressione di Linq, ad es. anelli e blocchi. –

+0

E penso che le espressioni creino solo una nuova funzione, senza un nuovo assembly. In questo modo risparmierai il sovraccarico del caricamento di un assembly aggiuntivo. – CodesInChaos