gpt4 book ai didi

c# - 使用 StackTrace 推断方法的调用者

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:41 25 4
gpt4 key购买 nike

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


我最近发现您可以使用 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;
}
}

我确定上面的伪代码中有错误,但你明白我的意思。


编辑:感谢大家的回复。

最佳答案

不这样做的原因有两个:

  • 它很慢
  • 它创建了一个脆弱的解决方案。

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

关于c# - 使用 StackTrace 推断方法的调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/318347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com