1

首先,我是一个新手程序员。我学习了 AutoHotkey 脚本,一堆 c# 和一些或 c++。我的问题不是特定于语言或语法,而是一个概念。我将首先解释这种情况(任何代码都应该被解释为类似于伪代码)。

我最近的项目是一个即时通讯程序,有一个服务器和一个客户端。它们的工作方式如下:

服务器

  • 将客户信息分配到 3 个不同的数组中(我不喜欢这样)
    • NewConnection[skt]、userNick[nick]、nickFromSocket[skt]

客户

  • 向服务器发送消息 > 服务器接收 > 服务器响应 > 客户端接收并将消息记录到聊天日志。

您可能已经注意到,数组 'userNick' 使用用户的实际昵称来代替传统的索引号(userNick[index])。这很重要,工作方式如下:

// New user has connected
skt  = WINSOCK_getSkt()
NewConnection[skt]  // Simple to parse with a loop: NewConnection.MaxIndex()

// Receive new user's nickname
skt  = WINSOCK_getSkt()
nick = WINSOCK_getNick()
userNick[nick]      = nick
nickFromSocket[skt] = nick

两次分配用户昵称背后的理论是避免使用循环来解析数组。这很简单并且可以实现,因为当客户端向服务器发送消息时,服务器可以看到套接字号(每个用户都是唯一的),使用该变量,我可以立即从 2 短行中获取用户的昵称:

// Get user's nickname
skt  = WINSOCK_getSkt()
nick = nickFromSocket[skt]

我希望到目前为止一切都清楚。

问题

如何将所有这些转换为一个类,同时保持从数组中获取数据的速度?我知道使用类会更简单,也更合乎逻辑,但是当需要解析的用户越来越多时,我担心类的效率。对象/类中是否有等价物?感谢您抽出宝贵时间阅读本文。

4

1 回答 1

2

是的,你确实需要一门课。喜欢

class User
{
    public string Nick { get; set; }
    public Socket Sock { get; set; }  // not sure about this type
    ...
}

然后,根据您的实际需要,使用 aList<User>和/或Dictionary<Connection, User>.

于 2012-09-30T23:26:40.743 回答