在数组初始化中使用委托

时间:2013-08-02 12:09:56

标签: c# arrays function struct delegates

我正在编写服务器代码,并且我已经与所有客户端建立了TCP连接。 现在,当客户端发送数据包时,我会检查数据包的操作码,以便我可以处理它。

目前,我有一个当前包含String name的OpcodeHandler结构,但我也希望它有一个C ++类型的函数指针调用另一个函数,这样当我创建一个结构为类型的数组时我像这样初始化数组:

opcodes = new OpcodeHandler[max_opcodes] 
{
  new OpcodeHandler("someopcodenamehere", Somefunctionname);
  // more new's..
}

在构造函数的第二个参数中命名的函数:调用函数指针时调用'Somefunctionname'。 我听说代理可以这样做,因为它们的行为就像C ++中的函数指针一样,但我的所有尝试都没用。

2 个答案:

答案 0 :(得分:1)

你说你有一个结构OpcodeHandler,你想要创建一个数组。

现在我不知道OpcodeHandler还有什么,但我会建议更简单的事情:

Dictionary<string, Action<PacketData>> OpcodeHandlers = new Dictionary<string, Action<PacketData>>();

这是代表词典。

您可以像这样添加功能:

OpcodeHandlers["someopcodenamehere"] = Somefunctionname;

并调用这样的函数:

OpcodeHandlers["someopcodenamehere"](packetData);


修改
您也可以像这样填写词典:

Dictionary<string, Action<PacketData>> OpcodeHandlers = new Dictionary<string, Action<PacketData>>
{
  { "functionName1", function1 },
  { "functionName2", function2 }
};

答案 1 :(得分:1)

new OpcodeHandler("someopcodenamehere", packetData => 
        Somefunctionname(packetData))