Это зависит от того, чего вы хотите достичь.
Вы упомянули об использовании 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.