目前我遇到了问题。我想用字符串扩展System.Socket
类,我可以将信息存储到Socket。
例如,添加一个名为Name的变量,但如果我这样写,那么它就不会起作用,因为所有套接字都具有相同的名称。有谁知道我怎么能解决这个问题或者最简单的方法是什么?
public static string Name;
public static string getName(this Socket socket)
{
return Name;
}
public static void setName(this Socket socket, string name)
{
Name = name;
}
答案 0 :(得分:2)
这里至少有几个选项:
Socket
类进行子类化,以便您可以向类型本身添加Name
属性。Socket
类包装在您自己的Name
属性类中。如果要使用扩展方法,则需要为每个string
对象维护不同的Socket
值。一种方法是使用一个字典,将Socket
对象引用映射到名称。例如:
public static Dictionary<Socket, string> _socketNames = new Dictionary<Socket, string>();
public static string getName(this Socket socket)
{
return _socketNames[socket];
}
public static void setName(this Socket socket, string name)
{
_socketNames[socket] = name;
}
子类化看起来像这样:
class SocketEx : Socket
{
public string Name { get; set; }
}
包装看起来像这样:
class SocketWrapper
{
public Socket Socket { get; }
public string Name { set; set; }
public SocketWrapper(Socket socket)
{
Socket = socket;
}
}
有了这样一个含糊不清的问题,我们无法知道哪种方法最适合您的具体需求。以上每一个都有其优点和缺点。你必须自己决定哪种方式最适合你。