C# 如何使用反射调用接受基类类型参数的方法?
我有如下的课程C# 如何使用反射调用接受基类类型参数的方法?,c#,reflection,C#,Reflection,我有如下的课程 public Class A { protected A() { } } Public class B : A { public B() { } } public class C{ private void Method1(A obj) { } } 我有如下方法 public Class A { protected A() { } } Public class
public Class A
{
protected A()
{
}
}
Public class B : A
{
public B()
{
}
}
public class C{
private void Method1(A obj)
{
}
}
我有如下方法
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 });
我试图使用反射调用这个私有方法,但遇到了参数异常
中发生“System.ArgumentException”类型的异常
mscorlib.dll,但未在用户代码中处理
“B”类型的对象无法转换为“A”类型
有谁能给我一点建议吗?你的代码对我来说很好,如果你想在
Method1
中检查类型,你可以使用if(obj是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
我是另外一个人
不,我的代码错误!它的论点exception@Lamps:那么应该在其他地方引发异常,您可以将我的测试代码复制到任何控制台项目并重试吗?尝试创建对象B,如objectb=new B()。如果您看到我的A类构造函数受保护,则无法在main中创建实例。@Lamps:我使用
A objectB=new B()得到了相同的结果代码>我使用公共构造函数进行测试的原因是我想向您展示输出(我是另一个
),您可以将其保持为受保护的
。谢谢Kienct89!!这是我的错。实际上,我有两个不同名称空间下的A类。我用错了,所以出了问题(