目前,我有一个问题。我想用字符串扩展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;
}
最佳答案
您在这里至少有一些选择:
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;
}
}
面对如此含糊的书面问题,我们不可能知道哪种方法最适合您的特定需求。以上每种都有其优点和缺点。您必须自己决定哪个最适合您。
关于c# - 向现有系统类添加对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733957/