我在方法C中有一些代码可以根据调用它的人来执行。
public void C()
{
if(A called me) { .... }
if(B called me) { .... }
}
一种方法是使用标志变量。在调用C之前设置变量,然后在C中处理标志。
还有其他想法吗?
答案 0 :(得分:12)
代码味道。
为什么C关心来电者?如果方法中的代码根据谁调用它而不同,那么您可能需要不同的方法
A() calls A_C()
B() calls B_C()
e.g。如果Baker类支持Bake(cakeSpec),则无论CustomerA或CustomerB是否调用它,它都应该具有相同的行为。您可能希望通过cakeSpec中的某些配置参数自定义烘焙的某些方面。但总的来说,Bake()应该按照它说的做。
需要更多信息......关于你想要实现的目标。
答案 1 :(得分:2)
看看StackTrace
课程,但正如乔恩所说,代号闻起来。
答案 2 :(得分:2)
以下代码可用于检索las调用方法:
StackTrace stackTrace = new StackTrace();
MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
答案 3 :(得分:1)
我认为你可以使用Reflection找到这个,如果你真的想要(我还没有这样做),但是使用它是个坏主意生产代码。如你所说,设置标志是一个更好的主意。事实上,旗帜应该具有语义含义,而不是“谁叫我”。找出调用方法对于日志记录和其他诊断目的最有用。
编辑:尝试了我正在考虑的反思方法(调用System.Reflection.RuntimeMethodInfo.InternalGetCurrentMethod()
)并且它不起作用。 :(
答案 4 :(得分:1)
我会这样做:
enum Funcs {A, B};
C(Func.A);
..
C(Func.B);
public void C(Funcs f)
{
if(f == Funcs.A) { .... }
if(f == Funcs.B) { .... }
}
答案 5 :(得分:0)
如果这是C编程,我可以通过使用函数指针技术来实现它,前提是A和B具有相同的参数。 A和B将在C的一个参数中传递一个标识信息,以便知道谁在调用... Win32 API中的WndProc()设计,其中消息是id,params是数据。
在C#中,我认为你可以使用代表。
答案 6 :(得分:0)
您可以发送一个参数来识别哪个calles c,例如0表示A,1表示B表示 但我想这算作糟糕的编程...