2010-11-19 12 views
5

¿El nuevo framework (> 2.0) .NET proporciona alguna mejora a la generación de código?Generación de código C# en .NET 4

Utilicé CodeDom en 2.0 y me pregunto si la generación de código puede ser más simple.

Respuesta

2

Depende de lo que quiere lograr.

Mencionaste usar el CodeDom para generar código; si buscas generar métodos sobre la marcha, entonces puedes usar expresiones LINQ (no puedo pensar en un buen tutorial fuera de mi cabeza, solo google para ello))

Las expresiones LINQ tienen la ventaja de ser más fáciles de escribir (en mi experiencia), más rápidas de generar (especialmente cuando se escribe una clase completa para encapsular un único método) y muy rápidas de ejecutar.

El siguiente es un fragmento de VB.Net una expresión LINQ que genera una función que toma en un control ASP.Net y devuelve su valor de la propiedad ViewState (protegida):

'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() 

Entonces podemos invocar la función generada de esta manera:

viewStateAccessor (myCntrl)("my_vs_key") 

Si lo que buscas para hacer la generación de código estático, a continuación, echa un vistazo a la característica de text template VS.

+0

Agregando a eso, en .NET4 incluye aún más soporte Linq Expression, p. bucles y bloques. –

+0

Y creo que las expresiones crean solo una nueva función, sin un nuevo ensamblaje. Así que se ahorra la sobrecarga de cargar un conjunto adicional. – CodesInChaos