2

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

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

没有MyClass::MyMethod()办法使用反射或其他方法将运行时的访问修饰符更改为公共然后调用它?

4

2 回答 2

7

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

MyClass instance = new MyClass();
MethodInfo yourMethod = instance
                            .GetType()
                            .GetMethod("MyMethod", BindingFlags.NonPublic | BindingFlags.Instance);
var returnValue = yourMethod.Invoke(instance, new object[] { });
Console.WriteLine(returnValue);
于 2013-10-11T19:07:14.950 回答
2

不,一个类就是它的本质,你不能在运行时改变它。

您可以创建一个具有成员的新类MyMethod,但它是公共的,但它不再是同一个类。

无论如何,我想不出在任何情况下做这样的事情会有任何意义。

于 2013-10-11T19:07:58.440 回答