繁体   English   中英

让构造函数解析到现有实例

[英]Have constructor resolve to an existing instance

我很好奇是否有办法告诉正在构造 class 以引用现有实例。

例如:

class MyClass
{
    string _name;

    static List<MyClass> _existing = new List<MyClass>();

    MyClass(string name)
    {
        foreach(MyClass existing in _existing)
        {
            if (existing._name == name)
            {
                // Set this instance to "existing"
                return;
            }
        }
        _name = name;
        _existing.Add(this);
    }
}

我认为你需要实现一个粒子的持有者,它可以直接创建或重用现有的对象。 每个 class 的构造函数不能负责查看它是否已经存在,因为只是更新它来检查,为它分配资源。 然后,您的粒子持有者(单个实例)将使用字典/哈希/列表/集合根据名称返回现有的,或创建和缓存新实例以供将来使用。

我不确定这是否是解决您实际问题的最佳方法,因为这听起来像是典型的 xy 问题。 也许您应该熟悉单例或依赖注入,您可以在其中详细控制它。

但是,要解决这个具体问题,您可以使用Dictionary<string, MyClass>

class MyClass
{
    string _name;

    static Dictionary<string, MyClass> _existing = new Dictionary<string, MyClass>();

    private MyClass(string name)
    {
        _name = name;
    }

    public static MyClass GetFromName(string name)
    {
        if(_existing.TryGetValue(name, out MyClass instance))
            return instance;

        MyClass newInstance = new MyClass(name);
        _existing.Add(name, newInstance);
        return newInstance;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM