[英]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.