【问题标题】:Passing a multi-method object to another class将多方法对象传递给另一个类
【发布时间】:2012-03-01 10:33:09
【问题描述】:

作为我正在进行的个人项目的一部分,我使用了一个由另一个程序员编写的小型代码库,并试图将其重构为我自己的目的。长话短说,他们有一大段代码是传入的命令解析器。我将代码移动到它自己的类文件中,并将几个代码位移动到该类中它们自己的方法中。我遇到的问题是我无法将两个需要的对象从原始代码块传递给新的解析器类。原始代码部分使用称为 AllSockets 的多方法对象。我似乎无法弄清楚如何将此对象传递给新的类方法而不会出现错误

错误 2 参数 2:无法从“方法组”转换为“对象”

调用代码行:

bool wasValidCommand = (commandParser.CheckForCommands(thisConnection, AllSockets, characterPath, helpFilePath));

调用的方法:

public bool CheckForCommands(ConnectionInfo _connected, object _AllSockets, string characterPath, string helpFilePath)

我在此处发布了托管 Server.cs 类:http://codepad.org/1kRHA1nk

我试图将对象传递给的新类在这里:http://codepad.org/oONRaEtt

警告:代码现在真的被破解了,变量命名是一场噩梦。如果这样更容易阅读,我可以粘贴特定部分。任何帮助将不胜感激。

【问题讨论】:

    标签: c# object methods refactoring wrapper


    【解决方案1】:

    将object _AllSockets 替换为:

    Func<string, object, object, object, object>_AllSockets
    

    您可能应该在 CheckForCommands、Shout 和 Tell 方法签名中替换它。

    【讨论】:

    • 非常有趣。我以前不知道 Func,现在有一些新的东西要研究。它解决了我遇到的问题。
    【解决方案2】:

    AllSockets 是一种方法。我猜你想获取AllSockets 方法返回的对象并将其传递给commandParser.CheckForCommands 函数。

    尝试类似:

    object allSockets = AllSockets(...);
    bool wasValidCommand = (commandParser.CheckForCommands(thisConnection, allSockets, characterPath, helpFilePath));
    

    【讨论】:

    • 这行不通,因为 AllSockets 参数在方法的后面,就像函数一样使用。
    【解决方案3】:

    AllSocket 方法声明为

    public object AllSockets(string tempFlag, object objectOne, object object_Two, object object_Three)
    

    快速浏览代码,AllSockets 似乎在类的私有 Shout(..) 方法中使用 - 作为方法。因此,为了将 this 作为函数对象传递,您可以使用类型委托或函数的参数声明 CheckForCommands 方法:

    delegate object AllSocketDelegate (string tempFlag, object objectOne, object object_Two, object object_Three); 
    public bool CheckForCommands(ConnectionInfo _connected, AllSocketDelegate _AllSockets, string characterPath, string helpFilePath)
    

    或与 Func 类似,而不是委托。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多