当前位置:  开发笔记 > 编程语言 > 正文

使用StackTrace来推断方法的调用者

如何解决《使用StackTrace来推断方法的调用者》经验,为你挑选了1个好方法。

编辑:警告 - 我现在意识到以下技术通常被认为是一个坏主意,因为它为了看起来整洁而创建隐藏的依赖项.


我最近发现您可以使用StackTrace来推断有关方法调用者的信息.

这使您可以创建一个看似"酷"的API,您只需调用一个方法而无需将任何显式参数传递给它,并且该方法可以根据StackTrace计算出该做什么.

这是一件坏事,如果是这样,为什么?

例:

public class Cache {
  public Object CheckCache()
  {
    Object valueToReturn = null;
    string key = GenerateCacheKeyFromMethodPrototype(new StackTrace().GetFrame(1).GetMethod()); //frame 1 contains caller
    if(key is in cache) valueToReturn = itemFromCache;

    return valueToReturn;   
  }
}

public class Foo { 
  private static Cache cache = new Cache();

  public Blah MethodFoo(param1, param2...)
  {
    Blah valueToReturn = cache.CheckCache(); //seems cool!
    if(valueToReturn == null)
    {
      valueToReturn = result of some calculation;
      //populate cache
    }

    return valueToReturn;
  }
}

我确定上面的伪代码有错误,但你得到了我的漂移.


编辑:感谢大家的回复.



1> David Kemp..:

为什么不这样做有两个原因:

这很慢

它创造了一个脆弱的解决方案.

如果你想这样做,你最好使用支持面向方面编程的工具,例如Castle的动态代理.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有