c# - 在运行时创建 C# 类

标签 c# .net

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

有什么意见吗?

最佳答案

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

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

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

关于c# - 在运行时创建 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659728/

相关文章:

c# - 如何从 puppeteer-sharp 中获取可读的浏览器/页面错误?

c# - 获取倒数第二个键值.net C#

c# - 计算 x 除以 x2 时的最大舍入差异

c# - 在 C# 中创建 GetHashCode 方法

c# - 在 .Net 中,是否可以在不从 System.Web.UI.Page 继承的类中使用 Response.Write

.net - 更改 .NET 应用程序配置文件名

c# - 使用存储库模式时 Entity Framework 不刷新数据

c# - Null 条件和 ToString 一起给出意想不到的结果

c# - 如何解析 d/y/year 的日期格式?

c# - 如果 StringBuilder 是可变的,那么为什么 StringBuilder 方法返回一个 StringBuilder 对象?