首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

基础知识,就怕你不会…千万别不会!解决思路

2012-09-22 
基础知识,就怕你不会……千万别不会!有 A 和 B 两个类,B类中有一个方法叫M1()。假如我在A类的一个方法里调用B

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

有 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;            }        }    }} 

热点排行