向现有系统类添加对象

本文关键字:添加 对象 有系统 | 更新日期: 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;
    }
}
写这样一个模糊的问题,不可能知道哪个最适合你的具体需求。以上每一种都有它的优点和缺点,你必须自己决定哪一种最适合你。