我对Reflection完全陌生,并且在遇到以下问题时遇到了一些麻烦。鉴于以下类结构,我想调用AddAdornments()
。
internal interface IVsCodeWindowManager
{
int AddAdornments();
}
internal class CompoundTextViewWindow
{
private IVsCodeWindowManager _codeWindowManager;
}
internal class VsCodeWindowAdapter : CompoundTextViewWindow
{
}
我有一个VsCodeWindowAdapter实例:
VsCodeWindowAdapter projCodeWindow;
我想调用AddAdornments
。例如,如果一切都是公开的,则调用将是:
projCodeWindow._codeWindowManager.AddAdornments();
我可以使用Reflection:
访问_codeWindowManager FieldInfovar _codeWindowManagerFieldInfo = projCodeWindow.GetType().BaseType.GetField("_codeWindowManager", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
以下代码返回null,我相信我需要一个基类实例才能访问_codeWindowManager
字段。
var _codeWindowManager = _codeWindowManagerFieldInfo.GetValue(projCodeWindow);
如何使用Reflection来访问基类的实例,以便我可以调用AddAdornments()
方法?
答案 0 :(得分:0)
您可以通过这种方式使用反射调用类中的特定方法(请记住,该方法不应与需要在类的构造函数中初始化的值相关,因为此方法不会实例化该类) :
var InvokeMethod = typeof(YourClass).GetMethod("MethodName");
// or Get.Methods()
InvokeMethod.Invoke(Arguements);
// if you use Get.Methods() you will get a collection of methods, enumerate in the collection to find what you want.