C# 生成加载基类字段

C# 生成加载基类字段,c#,.net,cil,reflection.emit,C#,.net,Cil,Reflection.emit,我有一个带有只读字符串字段的基类: public class BaseClass { readonly String field; public BaseClass() { field = "random"; } } 我在一个类中生成了一个实例方法,该类通过System.Reflection.Emit从基类扩展而来,它使用该字段,但我似乎无法通过以下方式访问它: (...) MethodBuilder methB = typeBuilder.Define

我有一个带有只读字符串字段的基类:

public class BaseClass {
    readonly String field;
    public BaseClass() {
        field = "random";
    }
}
我在一个类中生成了一个实例方法,该类通过System.Reflection.Emit从基类扩展而来,它使用该字段,但我似乎无法通过以下方式访问它:

(...)
MethodBuilder methB = typeBuilder.DefineMethod(method, MethodAttributes.Public, CallingConventions.HasThis, typeof(String), new Type[] { typeof(Object) });
ILGenerator methGen = methB.GetILGenerator();
methGen.Emit(OpCodes.Ldarg_0);
methGen.Emit(OpCodes.Ldfld, typeof(BaseClass).GetField("field"));
(...)

问题是如何访问字段?从基类或我在上一个案例中构建的当前类中,我还没有该类型。

两个直接的问题:(1)字段名区分大小写。在您的示例中,名称不匹配。(2) 默认情况下,字段是私有的,因此可能尝试使用
public
标记您的字段(1)是错误xD(2),因为新类扩展了不应该保护的字段?(2)不。我相信您正在考虑。如前所述,只读字段应该在基类中显式标记为protected或public,以便能够在派生类中看到它。如果该字段不是公共字段,则还必须在GetField调用中使用BindingFlags.NotPublic参数,因为reflection.emit默认情况下只查找公共成员。