общедоступная статическая пустота <callbackMethodName>(IAsyncResult) - PullRequest
0 голосов
/ 12 января 2010

привет! я застрял в настоящее время из-за недостатка знаний. у меня есть следующее:

    public void ClientEndConnect(IAsyncResult iar)
    {
        try
        {
            CommSocket = (Socket)iar.AsyncState;
            CommSocket.EndConnect(iar);

            OnNetworkEvents eventArgs = new OnNetworkEvents(true, "Connected: " + CommSocket.RemoteEndPoint.ToString(), string.Empty);
            OnUpdateNetworkStatusMessage(this, eventArgs);
        }
        catch (ArgumentNullException e)
        {
            OnNetworkEvents eventArgs = new OnNetworkEvents(false, "Network Unavailable", e.Message);
            OnUpdateNetworkStatusMessage(this, eventArgs);
        }
    }

это прекрасно компилируется, но так как это обратный вызов, то так и должно быть: (статично)

    public static void ClientEndConnect(IAsyncResult iar)
    {
        try
        {
            CommSocket = (Socket)iar.AsyncState;
            CommSocket.EndConnect(iar);

            OnNetworkEvents eventArgs = new OnNetworkEvents(true, "Connected: " + CommSocket.RemoteEndPoint.ToString(), string.Empty);
            OnUpdateNetworkStatusMessage(this, eventArgs);
        }
        catch (ArgumentNullException e)
        {
            OnNetworkEvents eventArgs = new OnNetworkEvents(false, "Network Unavailable", e.Message);
            OnUpdateNetworkStatusMessage(this, eventArgs);
        }
    )

но когда я делаю это, я получаю кучу ошибок, таких как:

Ошибка 1 Ссылка на объект требуется для нестатического поля, метода или свойства 'NietzscheBattleships.NetworkHelper.CommSocket'

из-за моего недостатка знаний в C # я не могу разобраться в этих ошибках. пожалуйста, помогите мне понять.

Я читаю о том, что является статичным, но ваши комментарии помогут также прояснить мою путаницу.

Ответы [ 3 ]

3 голосов
/ 12 января 2010

Почему обратный вызов должен быть статическим?

Вы получаете указанную ошибку, потому что обращаетесь к CommSocket, который является членом класса.

Просто оставьте свой обратный вызов нестатичным, и все будет хорошо.

Подробнее о ключевом слове static можно узнать здесь .

2 голосов
/ 12 января 2010

Вы ссылаетесь на 'this' внутри обратного вызова, это действительно только для членов экземпляра.

Есть ли причина, по которой вы считаете, что ваш обратный вызов должен быть статическим?

0 голосов
/ 12 января 2010

CommSocket также должен быть статическим, если вы пытаетесь получить к нему доступ или манипулировать им статическим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...