我有两个类:ServerOperation
(抽象的)和ServerOperationDefinitions
(从ServerOperation
派生并定义抽象函数)。我通过一个接受ServerOperationDefinitions
类型的函数传递ServerOperation
,然后将经过多态转换为基类的参数传递给另一个接受ServerOperation
对象的函数。但是,当我进入最终的目标类并尝试调用函数时,会抛出异常:System.NullReferenceException
。但是,如果我手动将ServerOperation
对象设置为新的ServerOperationDefinition
,则可以完美地工作。有什么作用?
这是第一个电话:
ServerManager.Launch(new ServerOperationDefinitions());
这是第二个电话:
public static void Launch(Object definedServerOperations)
{
Configuration.ServerVariables.IDENTITY = new UUID();
SocketManager serverSocket = new SocketManager(Configuration.ServerVariables.PORT, definedServerOperations);
}
最终目的地
public SocketManager(int port, Object operationDefinition)
{
ClientQueueManager queueManager = new ClientQueueManager(this);
BeginListen(port);
opDef = (ServerOperation)operationDefinition;
}
存储为
private ServerOperation opDef;
错误在这里
case NetObjectType.CLIENT_SERVER_RESPONSE_GENERIC:
--->opDef.handleRespondToClient(clientState, recievedNetworkObject);
Exception thrown: 'System.NullReferenceException' in
编辑: 但是如果我在其上方执行此操作,错误功能将起作用:
opDef = new ServerOperationDefinitions();
答案 0 :(得分:0)
问题在于订购错误和睡眠不足。 线程阻止了opDef的执行。 BeginListen阻塞主线程。
解决方案: 从这个
public SocketManager(int port, Object operationDefinition)
{
ClientQueueManager queueManager = new ClientQueueManager(this);
BeginListen(port);
opDef = (ServerOperation)operationDefinition;
}
到
public SocketManager(int port, ServerOperation operationDefinition)
{
ClientQueueManager queueManager = new ClientQueueManager(this);
opDef = operationDefinition;
BeginListen(port);
}
贷给@Guy