通过这种方式可以直接对接口实例化了(伪),动态的通过委托来实现接口,匿名类型是在运行时动态构建的。

实现思路:

使用AssemblyBuilder、TypeBuilder构建类型,并用FieldBuilder构建一个字典字段<String, Delegate>,用来保存函数名和匿名函数,MethodBuilder构建方法并使用IL流填充,调用保存的匿名函数表中的函数。

构建动态类型的方法要求传入一个<String, Delegate>函数字典,可以使用字典的初始化器来初始化匿名函数来达到实现接口的匿名类 。

因为没有先天的支持,不像Java中可以直接用关键字和标识符来声明,只能用字符串来标示对应的函数。

演示:

{{EJS0}}

代码:

{{EJS1}}