【问题标题】:using delegates in an array initialization在数组初始化中使用委托
【发布时间】:2013-08-03 16:53:38
【问题描述】:

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

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

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

在构造函数的第二个参数中命名的函数:'Somefunctionname' 在调用函数指针时被调​​用。 我听说委托可以做到这一点,因为它们的行为就像 C++ 中的函数指针,但我所有的尝试都是无用的。

【问题讨论】:

  • 函数的签名是什么?
  • 一个 void 返回类型,有一个参数:(数据包数据)

标签: c# arrays function struct delegates


【解决方案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 }
};

【讨论】:

  • 谢谢,我试试这个方法
【解决方案2】:
new OpcodeHandler("someopcodenamehere", packetData => 
        Somefunctionname(packetData))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2012-08-24
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多