在运行时创建C#类

Joh*_*ock 15 .net c#

我一直很好奇在C#中动态创建类,并且偶然发现了这篇文章.http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html 我很想知道在运行时构建类的一些优点和缺点.

任何意见?

Mar*_*ell 20

元编程具有构建时代码生成的所有优点,但没有额外的代码步骤.这在库代码中很常见,例如ORM,序列化器,某些类型的AOP,DI/IoC容器等.

  • +避免需要额外的构建步骤或编写普通代码
  • +这样的代码可以处理运行时的实际情况,而不必处理包装器周围的任何不常见的边缘情况或大量包装器(装饰器模式)
  • +允许在仅在运行时知道元数据的场景中的codegen
  • +运行时IL可以更多地访问私有字段等,这要归功于如何DynamicMethod与一个类型相关联; 完全生成(dll)代码将需要[InternalsVisibleTo]或类似,这可能是不可能的
  • - 并非所有系统都支持运行时代码; 它在某些服务器设置,紧凑框架,iPhone等上被禁用
  • - 这样做很难看.无论你如何做,这都不是正常的代码.
  • - 它需要非常好地理解事物的实际工作方式
  • +如果迫使你非常了解事情的实际工作方式

我目前正在重写现有的库以使用运行时IL生成; 这是非常有益的,我很高兴; 但它不像我以前写过的任何东西.


Hen*_*man 6

这不是利弊.

有时,基于以另一种方式转换为代码的繁琐信息或者在运行时之前不可用的信息来创建类是很方便的.

链接文章中的示例不是(作为应用程序员)通常会做的事情.但它在工具中很有用,例如,它可以基于数据库或XML模式生成类.