读书人

基础知识就怕你不会…千万别不会!解

发布时间: 2012-09-22 21:54:54 作者: rapoo

基础知识,就怕你不会……千万别不会!

有 A 和 B 两个类,B类中有一个方法叫M1()。
假如我在A类的一个方法里调用B类中的M1方法,怎么在M1方法里写代码才能获取到当前调用它的类名或方法名?


[解决办法]
获取当前调用的堆栈,里面有足够多的信息来满足你。
[解决办法]
请看下StackTrace对象。获取当前方法调用的堆栈信息,里面的内容足够满足你了。
[解决办法]
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame0 = stackTrace.GetFrame(0);
Console.WriteLine(stackFrame0.GetMethod().Name);//当前方法名
StackFrame stackFrame1 = stackTrace.GetFrame(1);
Console.WriteLine(stackFrame1.GetMethod().Name);//调用这个方法的方法名
[解决办法]

C# code
class A{    public C c = new C();    public void CallM1Method()    {        c.M1();    }}class B{    public C c = new C();    public void CallM1Method()    {        c.M1();    }}class C{    public void M1()    {        // 获取到底是 A 调用的还是 B 调用的        Type aType = typeof(A);        Type bType = typeof(B);        StackTrace trace = new StackTrace();        StackFrame[] frames = trace.GetFrames();        foreach (StackFrame frame in frames)        {            Type t = frame.GetMethod().DeclaringType;            if (t == aType)            {                Console.WriteLine("A invoke");                break;            }            if (t == bType)            {                Console.WriteLine("B invoke");                break;            }        }    }} 

读书人网 >C#

热点推荐