编辑:警告-我现在意识到以下技术通常被认为是不好的想法,因为它为了看起来整洁而创建了隐藏的依赖关系。
我最近发现您可以使用StackTrace推断方法的调用者的信息。
这使您能够创建一个看似“酷炫”的API,您只需调用一个方法,而不必在调用中传递任何显式参数,该方法会根据StaockTrace自行确定要执行的操作。
这是一件不好的事情吗?如果是,为什么?
例子:
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;
}
}
我相信以上的伪代码中可能会有错误,但您应该能够理解我的意思。
编辑:感谢大家的回复。 (Bianji: Ganxie dajia de huiying.)