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类。我用错了,所以出了问题(