Передача объекта с несколькими методами другому классу - PullRequest
0 голосов
/ 09 февраля 2012

В рамках личного проекта, над которым я работаю, я взял небольшую кодовую базу, написанную другим программистом, и пытался реорганизовать ее для своих собственных целей. Короче говоря, у них был огромный раздел кода, который был парсером входящих команд. Я переместил код в его собственный файл класса и переместил несколько битов кода в их собственные методы в этом классе. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу передать два необходимых объекта из исходного блока кода в новый класс анализатора. В разделе оригинального кода используется объект mutliple-метода с именем 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

Предупреждение: код действительно сейчас взломан, а присвоение имен переменам - кошмар. Я могу вставить отдельные разделы, если это будет легче читать. Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Метод AllSocket объявлен как

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

При быстром просмотре кода выясняется, что AllSockets используется в закрытом методе Shout (..) класса - как метод. Таким образом, чтобы передать это как функциональный объект, вы можете объявить метод CheckForCommands с параметром типа делегат или Function:

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 вместо делегата.

1 голос
/ 09 февраля 2012

Заменить object _AllSockets на:

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

Возможно, вам следует заменить это в сигнатурах методов CheckForCommands, Shout и Tell.

0 голосов
/ 09 февраля 2012

AllSockets - это метод. Я предполагаю, что вы хотите взять объект, который возвращает метод AllSockets, и передать его в функцию commandParser.CheckForCommands.

Попробуйте что-то вроде:

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