gpt4 book ai didi

c# - 向现有系统类添加对象

转载 作者:行者123 更新时间:2023-12-03 11:59:46 26 4
gpt4 key购买 nike

目前,我有一个问题。我想用字符串扩展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属性的类型。

  • 如果要使用扩展方法,则需要为每个 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com