在运行时更改访问修饰符

时间:2013-10-11 19:00:12

标签: c# reflection access-modifiers

仅仅为了举例,我写了这个:

public class MyClass
{
    private int MyMethod()
    {
        return 1;
    }
}

是否有任何方式将运行时MyClass::MyMethod()的访问修饰符更改为 public 使用Reflection或其他内容然后调用它?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

不,课程就是这样,你不能在运行时改变它。

您可以创建一个包含成员的新类,但MyMethod将是公开的,但它不再是同一个类。

在任何情况下,我都无法想到这样做会有任何意义的任何情况。