作者:chris guo
链接:https://www.zhihu.com/question/47896687/answer/108146674
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Program
{
public static void Main()
{
//Reflected Invoke
var type = typeof(A);
var method = type.GetMethod("Do", BindingFlags.Static | BindingFlags.NonPublic);
method.Invoke(null, null);
//Normal Invoke
A.PublicDo();
Console.ReadLine();
}
}
class A
{
public static void PublicDo()
{
Do();
}
private static void Do()
{
StackFrame[] stacks = new StackTrace().GetFrames();
if(stacks[1].GetMethod().DeclaringType.FullName == "System.RuntimeMethodHandle")
{
throw new Exception("Reflected Invoke!");
}
Console.WriteLine("aaa");
}
}
java里也可以根据stacktrace判断。
Thread.currentThread().getStackTrace()
判断Method.invoke方法,不过要判断的仔细一点。。