代码之家  ›  专栏  ›  技术社区  ›  John Hartsock

在运行时创建C类

  •  14
  • John Hartsock  · 技术社区  · 16 年前

    我对C语言中运行时动态创建类很感兴趣,偶然发现了这篇文章。 http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html

    有什么意见吗?

    6 回复  |  直到 16 年前
        1
  •  20
  •   Marc Gravell    16 年前

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

    • +这样的代码能处理什么 事实上 是运行时的情况,而不是必须处理任何不常见的边缘情况或包装器周围的大量包装器(装饰器模式)
    • +允许在元数据仅在运行时已知的情况下使用codegen
    • +运行时IL可以有更多的访问私人领域等,感谢如何 DynamicMethod [InternalsVisibleTo] 或者类似的,这可能是不可能的
    • -并非所有系统 支持
    • 丑小虫 去做。不管你怎么做,这都是
    • +如果强迫你很好地理解事情在幕后是如何运作的

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

        2
  •  6
  •   Henk Holterman    16 年前

    这不是正反两方面的问题。

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

    链接文章中的例子并不重要

        3
  •  2
  •   Joel    16 年前

    每件事都有时间和地点,包括这个(例如,泛型)。但是,在我开始之前,我会考虑在运行时生成类的替代方法。除了生成类,很可能还有一种更好、更易于维护的替代方法。

        4
  •  0
  •   harpo Binary Worrier    16 年前

    您可能已经有运行时生成类的经验了。泛型是在运行时在CLR中构建的,当它们第一次被需要时。XmlSerializer的实现也是如此。

        5
  •  0
  •   Daniel Rose    16 年前

    优点:您可以在运行时创建所需的任何内容。

    缺点:您没有编译时检查,因此如果出现任何错误,一切都会崩溃。

    基本上与使用反射的优点/缺点相同。

        6
  •  0
  •   Damian Powell    16 年前

    脑海中浮现的一个缺点是记忆的使用。如果每次接收请求时动态构建一个类来处理某个请求,那么每次都有可能为相同的值生成一个新类。一旦类或程序集加载到应用程序域中,就无法卸载它。因此,尽可能缓存生成的程序集和类。