如何知道调用了哪个函数
本文关键字:函数 何知道 调用 | 更新日期: 2023-09-27 18:19:33
我使用委托在许多函数(即)之间进行动态选择
delegate bool CtrlTransfer(int xferLength, ref byte[] buffer);
bool CtrlRead(int xferLength, ref byte[] buffer)
{ /* do a read */ }
bool CtrlWrite(int xferLength, ref byte[] buffer)
{ /* do a write */ }
这些被用作的调度功能
byte[] RunTest(CtrlTransfer ctrlXferFunction, /* a bunch of other args */) {
/* do some stuff */
ctrlXferFunction(/* its arguments */);
/* do some more stuff */
return someByteArray;
}
我之所以使用委托,而不是一些指示方向的参数,是因为ctrlXferFunction
被调用了很多次,在任何地方使用if {..} else {..}
都变得非常乏味。
我现在的问题是,我不知道实际调用了哪个控制传递函数。如果我尝试if(ctrlXferFunction == CtrlRead)
a la Python或JavaScript,我会得到一个错误,即==
不能在方法组和CtrlTransfer之间使用。
有没有办法知道实际调用了哪个函数?
(如果我犯了任何术语错误,我深表歉意。我是C#的新手)
您可以在委托上使用Method
属性:
if( ctrlXferFunction.Method.Name == "CtrlRead" ) ...
如果我在你身边,我会使用一个接口而不是委托。这将导致更容易的信息检索关于什么是来电者。
interface IMyInterface
{
bool CtrlTransfer(int xferLength, ref byte[] buffer);
}
然后:
class MyReader : IMyInterface
{
bool CtrlTransfer(int xferLength, ref byte[] buffer)
{
// do the read...
}
}
最后:
var reader = ctrlXferInstance as MyReader;
if (reader != null)
{
// ...
}