如何知道调用了哪个函数

时间:2013-06-24 05:19:15

标签: c#

我正在使用委托来动态选择多种功能,即

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) Python或JavaScript,我会收到错误,==无法在方法组和CtrlTransfer之间使用。

有没有办法知道实际调用了哪个函数?

(如果我犯了任何术语错误,我表示歉意。我是C#的新手)

2 个答案:

答案 0 :(得分:3)

您可以在委托上使用Method属性:

if( ctrlXferFunction.Method.Name == "CtrlRead" ) ...

答案 1 :(得分:1)

如果我在你身边,我会使用界面而不是委托。这将导致更容易的信息检索关于什么是调用者。

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)
{
  // ...
}