1
爲什麼會出現這樣的代碼:C#dynamic + System.Reflection.Emit =不混合?
using System;
using System.Reflection;
using System.Reflection.Emit;
class Program
{
static Type CreateDynamicType()
{
var typeBuilder = AppDomain.CurrentDomain
.DefineDynamicAssembly(
name: new AssemblyName("FooAssembly"),
access: AssemblyBuilderAccess.Run)
.DefineDynamicModule("FooModule")
.DefineType("Foo", TypeAttributes.Class);
typeBuilder
.DefineDefaultConstructor(MethodAttributes.Public);
var method = typeBuilder
.DefineMethod("SayHello", MethodAttributes.Public);
var il = method.GetILGenerator();
il.EmitWriteLine("Hello!");
il.Emit(OpCodes.Ret);
return typeBuilder.CreateType();
}
static void Main()
{
var type = CreateDynamicType();
dynamic instance = Activator.CreateInstance(type);
instance.SayHello();
}
}
可生產例外:
未處理的異常: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: '對象' 不 不包含「SayHello的定義'
但通過反射API調用完美的作品。有任何想法嗎?
非常好,謝謝! – ControlFlow 2012-03-13 16:15:35