我们要在DisabledObsoleteMethod函数里限制具有“Obsolete”属性的方法调用,我们如何去做呢?在.Net中提供了一个"StackFrame"类用于表示当前线程上的函数调用堆栈中的某个具体函数,所以我们通过它就可继续编写我们的DisabledObsoleteMethod函数
也许在某些场合下我们想知道自己的某个方法是被谁(哪个方法)调用的?比如下面的例子:

        }


在上面代码中,我们要在DisabledObsoleteMethod函数里限制具有“Obsolete”属性的方法调用,我们如何去做呢?

在.Net中提供了一个"StackFrame"类用于表示当前线程上的函数调用堆栈中的某个具体函数,所以我们通过它就可继续编写我们的DisabledObsoleteMethod函数,代码如下:

        }


到此,当运行Method1时我们的DisabledObsoleteMethod函数就可以正常运作,而Method2就会被抛出异常警告了C#:让您知道您的方法是被何“人”调用


因为StackFrame的构造函数可以指定偏移量,所以我们可以使用它获取调用我们的函数时函数调用堆栈里都有些什么函数,也即是可以了解到当前程序的一个流程是如何的,示例代码如下:

C#:让您知道您的方法是被何“人”调用    class Test
    }


其实.NET已经为我们提供了一个StackTrace类,其可以获取函数调用堆栈里的所有函数的有序集合,通过它我们就能将上面的代码简化为下面的代码了,如下:

C#:让您知道您的方法是被何“人”调用   class Test
    }


两者输出的结果还是一样的C#:让您知道您的方法是被何“人”调用,如下:

C#:让您知道您的方法是被何“人”调用Main
C#:让您知道您的方法是被何“人”调用_nExecuteAssembly
C#:让您知道您的方法是被何“人”调用ExecuteAssembly
C#:让您知道您的方法是被何“人”调用RunUsersAssembly
C#:让您知道您的方法是被何“人”调用ThreadStart_Context
C#:让您知道您的方法是被何“人”调用Run
C#:让您知道您的方法是被何“人”调用ThreadStart


看来在控制台程序中也是由某个线程委托开始运作的C#:让您知道您的方法是被何“人”调用

来自:http://www.cnblogs.com/kingthy/archive/2008/04/19/1160816.html

相关文章: