【发布时间】:2014-06-29 02:09:59
【问题描述】:
我对 Reflection 完全陌生,并且在以下问题上遇到了一些麻烦。鉴于以下类结构,我想调用AddAdornments()。
internal interface IVsCodeWindowManager
{
int AddAdornments();
}
internal class CompoundTextViewWindow
{
private IVsCodeWindowManager _codeWindowManager;
}
internal class VsCodeWindowAdapter : CompoundTextViewWindow
{
}
我有一个 VsCodeWindowAdapter 的实例:
VsCodeWindowAdapter projCodeWindow;
我想调用AddAdornments。例如,如果所有内容都是公开的,则调用将是:
projCodeWindow._codeWindowManager.AddAdornments();
我可以通过反射访问 _codeWindowManager FieldInfo:
var _codeWindowManagerFieldInfo = projCodeWindow.GetType().BaseType.GetField("_codeWindowManager", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
以下代码返回null,我相信我需要一个基类的实例才能访问_codeWindowManager字段。
var _codeWindowManager = _codeWindowManagerFieldInfo.GetValue(projCodeWindow);
如何使用反射来访问基类的实例,以便调用AddAdornments() 方法?
【问题讨论】:
-
您需要执行GetMethod() 以从
codeWindowManager的非空实例中获取MethodInfo,一旦您拥有该MethodInfo,您就可以调用它。
标签: c# reflection field instance base-class