仅仅为了举例,我写了这个:
public class MyClass
{
private int MyMethod()
{
return 1;
}
}
是否有任何方式将运行时MyClass::MyMethod()
的访问修饰符更改为 public 使用Reflection或其他内容然后调用它?
答案 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
将是公开的,但它不再是同一个类。
在任何情况下,我都无法想到这样做会有任何意义的任何情况。