向现有系统类添加对象
本文关键字:添加 对象 有系统 | 更新日期: 2023-09-27 18:09:11
目前我有一个问题。我想用字符串扩展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
属性到类型本身。 - 使用"Decorator Pattern"将
Socket
类包装成你自己的具有Name
属性的类型。
如果你想使用扩展方法,你需要为每个Socket
对象维护一个不同的string
值。一种方法是使用一个字典,将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;
}
}
写这样一个模糊的问题,不可能知道哪个最适合你的具体需求。以上每一种都有它的优点和缺点,你必须自己决定哪一种最适合你。