public static void <callbackmethodname>(IAsyncResult)</callbackmethodname>

时间:2010-01-12 15:50:26

标签: c# static

问候!由于缺乏知识,我目前陷入困境。我有以下内容:

    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 个答案:

答案 0 :(得分:3)

为什么回调应该是静态的?

您收到指定的错误,因为您正在访问属于该类的成员的CommSocket。

让你的回调非静态,一切都会好的。

您可以获得有关static关键字here的内容的更多信息。

答案 1 :(得分:2)

您在回调中引用'this',这仅对实例成员有效。

你有什么理由认为你的回调必须是静态的吗?

答案 2 :(得分:0)

如果您尝试从静态方法访问/操作它,

CommSocket也必须是静态的。