Генерация кода C # в .NET 4 - PullRequest
       1

Генерация кода C # в .NET 4

5 голосов
/ 19 ноября 2010

Предоставляет ли новая (> 2.0) .NET Framework какие-либо улучшения для генерации кода?

Я использовал CodeDom в 2.0 и мне интересно, может ли генерация кода быть проще.

1 Ответ

2 голосов
/ 19 ноября 2010

Это зависит от того, чего вы хотите достичь.

Вы упомянули об использовании CodeDom для генерации кода - если вы хотите генерировать методы на лету, то вы можете использовать выражения LINQ (я не могу придумать действительно хороший учебник из головы, но просто Google для этого) .

Выражения LINQ имеют то преимущество, что их легче писать (по моему опыту), быстрее генерировать (особенно когда вы пишете целый класс для инкапсуляции одного метода) и очень быстро выполнять.

Ниже приведен фрагмент VB.Net выражения LINQ, который генерирует функцию, которая принимает элемент управления ASP.Net и возвращает его (защищенное) значение свойства 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()

Затем мы можем вызвать сгенерированную функцию следующим образом:

viewStateAccessor (myCntrl)("my_vs_key")

Если вы хотите создать статический код, воспользуйтесь текстовым шаблоном для VS.

...