我试图将动态方法作为参数传递给另一个方法。 但是,传递的方法始终为null。如果我直接调用该方法,一切正常。
我首先尝试使用给定的委托作为参数,然后使用动态关键字,如下所示。
有人可以帮助我吗?
我正在使用SignalR Framework,因此Clients.Caller是动态对象。
public void Dummy() {
Clients.Caller.getChunk(new byte[] { 0x01 }); // I work fine!
SendData(new byte[] { 0x01 }, Clients.Caller.getChunk); // I don't?
}
private void SendData(byte[] bigData, dynamic targetFunction)
{
targetFunction(bigData); // targetFunction always null.
}
答案 0 :(得分:0)
您似乎可能需要实例化委托才能使用或调用它。我写了一些草率的代码,但我希望它有所帮助。
class Program
{
delegate void GetChunk(byte[] address);
static void Main(string[] args)
{
Class1 class2 = new Class1();
GetChunk del = new GetChunk(TheDelegate);
SendData(new byte[] {0x01}, del);
}
public static void SendData(byte[] data, dynamic targetFunction)
{
targetFunction(data);
}
static void TheDelegate(byte[] chunk)
{
Console.WriteLine(chunk);
}
}
答案 1 :(得分:0)
static void Main(string[] args)
{
TestClass class2 = new TestClass();
Action<byte[]> targetFunction = TheDelegate;
SendData(new byte[] { 0x01 }, targetFunction);
}
public static void SendData(byte[] data, dynamic targetFunction)
{
targetFunction(data);
}
private static void TheDelegate(byte[] chunk)
{
Console.WriteLine(chunk[0]);
Console.ReadKey();
}