如何知道调用了哪个函数

本文关键字:函数 何知道 调用 | 更新日期: 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)
{
  // ...
}