c# – Reflection.Emit私有字段/属性访问
发布时间:2020-12-15 21:37:38 所属栏目:百科 来源:网络整理
导读:我正在使用Reflection.Emit来动态生成字段的getter.到目前为止,我的代码适用于我测试的所有情况,除非该字段不公开.当字段不公开时,调用委托会抛出“System.NullReferenceException:Object reference not not set to object of object”. 我正在使用此代码生
我正在使用Reflection.Emit来动态生成字段的getter.到目前为止,我的代码适用于我测试的所有情况,除非该字段不公开.当字段不公开时,调用委托会抛出“System.NullReferenceException:Object reference not not set to object of object”.
我正在使用此代码生成:(字段是FieldInfo) DynamicMethod dm = new DynamicMethod(String.Concat ("_Set",field.Name,"_"),typeof(void),new Type[] { typeof(object),typeof(object) },field.DeclaringType,true); ILGenerator generator = dm.GetILGenerator (); generator.Emit (OpCodes.Ldarg_0); generator.Emit (OpCodes.Ldarg_1); if (field.FieldType.IsValueType) generator.Emit (OpCodes.Unbox_Any,field.FieldType); generator.Emit (OpCodes.Stfld,field); generator.Emit (OpCodes.Ret); return (Action<object,object>)dm.CreateDelegate (typeof(Action<object,object>)); 解决方法
你打电话给适当的参数?对于私有字段,您需要指定BindingFlags.NonPublic,如:
var field = this.GetType().GetField("someField",BindingFlags.NonPublic | BindingFlags.Instance); 要么 var field = this.GetType().GetField("someField",BindingFlags.NonPublic | BindingFlags.Static); 你能发布抛出异常的程序的完整例子吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |