是否可以使用.NET中的反射向类中添加函数?
例如,我是否可以编写将函数添加到添加两个Int32并返回结果的类的代码?
这假设没有任何这样的函数已经编译到系统中,所以我想到的基本上是将字符串转换为函数,类似于JavaScript对“eval”的作用(是的,我知道eval
evil )。
答案 0 :(得分:3)
您应该能够使用以下几种方法在运行时创建程序集:
使用Roslyn(目前在CTP中),你应该能够将任意一段.NET代码编译成一个程序集,并且它可以轻松地工作。这是目前最轻松的运行时代码生成方式。
你可以通过ILWeaving以硬(呃)的方式做到这一点。这基本上是在运行时发出IL代码,您不仅可以生成新的类/函数等。但你可以修改现有的。已经有一些已经通过ILWeaving实现INotifyPropertyChanged接口。你仍然需要很好地理解IL才能做到这一点。
使用某种Aspect framework。这些框架为您提供了繁重的工作,因此您不会编写IL代码。通常在编译时为您生成必要的代码。
使用Dynamic Proxies,你也可以控制现有代码的功能,比如说,如果你有兴趣在类的现有方法/功能之前/之后做某事。
答案 1 :(得分:1)
你也必须发出课程,所以不能你不能添加,也很痛苦。
查看使用.NET动态语言Python,Ruby甚至java(井ECMA)脚本都可用。
根据您对Mitch的回答的评论,您可能想要查看的另一件事是AppDomain.AssemblyResolve事件。你可以做一些有趣的事情,比如把你的程序集保存在数据库blob中。
你需要在这条路线上做一些认真的计划。
答案 2 :(得分:0)
不,不是。您只能读取类中的函数,不能添加它。无论如何你还需要吗?只需在当前程序中编写要添加到其中的代码即可。