使一个对象的实例指向另一个对象
c#
我想要做的是这实际上是:
this = object1
this = object1
其中 this 是类中使用的“this”关键字,object1 是我希望“this”指向的对象。那可能吗?
基本上,我想要
this == object1
评估为真。
为清楚起见编辑:
所以我想要做的是,如果一个对象曾经使用与之前的对象相同的参数创建,我希望该对象指向已经创建的对象以避免做不必要的工作。
回答
不,这是不可能的(没有双关语)。this不能重新分配(在类中)。
- ...在一个班级。有点奇怪的是 IMO,您可以在结构中重新分配 `this`。
回答
只是为了记录。
在 a 中struct,this是一个有效的LValue,即您可以this在结构代码中分配一些东西。例如:
struct Data
{
public int Hi;
public int Lo;
public Data (Data other) {
this = other;
}
}
这是因为ValueTypes的复制语义,它没有对象标识。但对于 RefTypes aka 类是不可能的。
回答
所以我想要做的是,如果一个对象曾经使用与之前的对象相同的参数创建,我希望该对象指向已经创建的对象以避免做不必要的工作。
然后你需要一个创建你的实例的工厂,一个映射和缓存你的实例的字典,你的类应该实现 IEquality<T> 以使查找和相等比较有效。
编辑:
一个简单的版本(没有 IEquality<T>)看起来像:
public class TestObject {
private static Dictionary<string, TestObject> _objectMap = new Dictionary<string, TestObject>();
public static TestObject GetInstance (string name){
if(!_objectMap.TryGetValue(name), out var instance){
instance = new TestObject(name);
_objectMap.Add(name, instance;
}
return instance;
}
private TestObject (string name){
Name = name;
}
public string Name {get;}
}
在 DI 和非耦合服务的时代,人们不会使用静态方法,而是使用另一个具有单例范围的工厂类。
IEquality 仍然有用,因为 HashSets 和 Dictionaries 需要一个好的 HashCodes。