如何使用反射调用接受基类类型参数的方法

本文关键字:基类 类型参数 方法 何使用 反射 调用 | 更新日期: 2023-09-27 18:28:24

我有类似的类

public Class A
{    
    protected A()
    {
    }
}
Public class B : A
{
    public B()
    {
    }
}

我有下面这样的方法

public class C{
    private void Method1(A obj)
    {
    }
}

使用反射的方法调用

MethodInfo method1= typeof(C).GetMethod("Method1", BindingFlags.NonPublic | BindingFlags.Instance);
var result = method1.Invoke(cObject, new object[] { objectB });

我试图使用反射调用这个私有方法,但我得到了Argument异常

中发生类型为"System.ArgumentException"的异常mscorlib.dll,但未在用户代码中处理

"B"类型的对象无法转换为"A"类型。

有人能在这方面给我建议吗?

如何使用反射调用接受基类类型参数的方法

您的代码对我来说很好,如果您想检查Method1中的类型,可以使用if(obj is B)作为我的示例

public class A
{    
    public A()
    {
    }
}
public class B : A
{
    public B()
    {
    }
}
public class C
{
    private void Method1(A obj)
    {
        if (obj is B)
        {
            Console.WriteLine("I'm B object!");
        }
        else
        {
            Console.WriteLine("I'm something else");
        }
    }
}
public class MainClass
{
    public static void Main()
    {
        B objectB = new B();
        A objectA = new A();
        C objectC = new C();
        
        MethodInfo method1 = typeof(C).GetMethod("Method1", BindingFlags.NonPublic | BindingFlags.Instance);
        
        method1.Invoke(objectC, new object[] { objectB });
        method1.Invoke(objectC, new object[] { objectA });
    }
}

控制台输出:

我是B

我是别的