也许在某些场合下我们想知道自己的某个方法是被谁(哪个方法)调用的?比如下面的例子:
/**//// <summary>
/// 正常方法
/// </summary>
static void Method1()
{
DisabledObsoleteMethod();
}
/**//// <summary>
/// 过期方法
/// </summary>
[Obsolete]
static void Method2()
{
DisabledObsoleteMethod();
}
/**//// <summary>
/// 禁止过期方法调用此方法
/// </summary>
static void DisabledObsoleteMethod()
{
//如果调用此方法的方法中有"Obsolete"标记则不允许继续运行
}
在上面代码中,我们要在DisabledObsoleteMethod函数里限制具有“Obsolete”属性的方法调用,我们如何去做呢?
在.Net中提供了一个"StackFrame"类用于表示当前线程上的函数调用堆栈中的某个具体函数,所以我们通过它就可继续编写我们的DisabledObsoleteMethod函数,代码如下:
/**//// <summary>
/// 禁止过期方法调用此方法
/// </summary>
static void DisabledObsoleteMethod()
{
StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数
MethodBase method = frame.GetMethod(); //取得调用函数
//反射获取其特性
object attributes = method.GetCustomAttributes(typeof(ObsoleteAttribute), false);
&