调用类的方法'反射的基础场

本文关键字:反射的 方法 调用 | 更新日期: 2023-09-27 18:10:51

我是一个完全陌生的反射和一直有一些麻烦与以下问题。给定下面的类结构,我想调用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()方法?

调用类的方法'反射的基础场

您可以通过以下方式从类中调用特定的方法(请记住,该方法不应该与需要在类的构造函数中初始化的值相关,因为这种方法不会实例化类):

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.