编辑:警告-我现在意识到以下技术通常被认为是一个坏主意,因为它为了看起来整洁而创建了隐藏的依赖项。
我最近发现您可以使用 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;
}
}
我确定上面的伪代码中有错误,但你明白我的意思。
编辑:感谢大家的回复。