我有类似下面的课程
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”类型。
有人能告诉我吗?
答案 0 :(得分:2)
您的代码看起来很好,如果您想查看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
我是别的什么