在运行时更改访问修饰符

Net*_*ire 1 c# reflection access-modifiers

仅仅为了举例,我写了这样的:

public class MyClass
{
    private int MyMethod()
    {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

没有办法使用Reflection或其他东西将MyClass::MyMethod()运行时的访问修饰符更改为public然后调用它?

Hab*_*bib 6

不确定是否可以修改访问说明符,但可以通过反射调用私有方法,如:

MyClass instance = new MyClass();
MethodInfo yourMethod = instance
                            .GetType()
                            .GetMethod("MyMethod", BindingFlags.NonPublic | BindingFlags.Instance);
var returnValue = yourMethod.Invoke(instance, new object[] { });
Console.WriteLine(returnValue);
Run Code Online (Sandbox Code Playgroud)