我试图反映派生类型中的字段,但它返回基本类型的字段.
public class basetype
{
string basevar;
}
public class derivedtype : basetype
{
string derivedvar;
}
Run Code Online (Sandbox Code Playgroud)
在某些功能:
derivedtype derived = new derivedtype();
FieldInfo[] fields = derived.GetType().GetFields();
Run Code Online (Sandbox Code Playgroud)
这将返回basevar,但不返回derivedvar.我已经尝试了所有不同的绑定,它似乎没有什么区别.
此外,我在App_Code中的ASP.NET中执行此操作,其中basevar在App_Code中定义,derivedvar是在App_Controls中定义的用户控件,其中类型不在范围内.
Jon*_*nna 10
因此,这将不返回任何内容,因为默认绑定仅适用于公共字段.
同样,衍生类型不是从基类派生的
附:
FieldInfo[] fields = derived.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)
它返回derivedvar.我刚刚检查过LINQPad.
如果我将derivedtype更改为从basetype派生,那么我可以使用以下两个字段获取:
FieldInfo[] fields = derived.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Concat(derived.GetType().BaseType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)).ToArray();
Run Code Online (Sandbox Code Playgroud)
反射有点奇怪。
如果成员是公共的,则整个层次结构中的所有成员都是可见的。
如果成员是非公共的,则必须指定 BindingFlags.NonPublic,并且您将仅获得所使用类型的成员。继承的成员不可见。如果您想查看某个类型的所有非公共成员,您必须沿着继承链向上走。
归档时间: |
|
查看次数: |
4454 次 |
最近记录: |