我正在使用委托来动态选择多种功能,即
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#的新手)
答案 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)
{
// ...
}