gdo*_*ica 1 .net c# oop reflection inheritance
我有一个派生自基类的类,它有一个私有字段.如何获取BaseType字段值?
public class SuperClass : BaseClass
{
}
public class BaseClass
{
private object theField;
}
Run Code Online (Sandbox Code Playgroud)
我有SuperClass实例,代码应该是这样的:
var baseType = super.GetType().BaseType;
var fieldInfo = baseType.GetField("theField", BindingFlags.NonPublic | BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)
现在我如何从fieldInfo中获取值?或者我的做法是错的?
fieldInfo.GetValue(this)
Run Code Online (Sandbox Code Playgroud)
顺便说一下你不需要super.GetType
- 你可以这样做:
this.GetType().BaseType
Run Code Online (Sandbox Code Playgroud)
同样,因为您知道基本类型 - 它可能稍微快一点
typeof(BaseClass).GetField("theField" ....)
Run Code Online (Sandbox Code Playgroud)
我this
之所以使用,是因为你的问题意味着你写的代码是你写的代码的一部分SuperClass
(尽管它不是有效的C#):
var baseType = super.GetType().BaseType;
Run Code Online (Sandbox Code Playgroud)
如果情况并非如此,并且您有一个实例,SuperClass
那么这将做:
var obj = new SuperClass();
var privateValue = typeof(BaseClass).GetField("theField",
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj);
Run Code Online (Sandbox Code Playgroud)
我实际上强烈建议不要使用obj.GetType().BaseType
- 因为如果您选择在SuperClass
和之间注入基数,您的反射会立即中断BaseClass
; 而使用typeof(BaseClass)
不会 - 除非你实际上BaseClass
从SuperClass
继承树中删除.