使一个对象的实例指向另一个对象

  • 本文关键字:一个对象 实例 c#
  • 更新时间 :
  • 英文 :


我想做的实际上是:

this = object1

其中这是";这个";关键字,而object1是我想要的对象";这个";指向。这可能吗?

基本上,我想要

this == object1

以评估为真。

编辑以保持清晰:

Public class TestObject {
private static HashSet<string> setOfNames = new HashSet<string>();
private static List<TestObject > listOfObjects= new List<TestObject >();
private string name = null;

public TestObject (string name){
if(setOfNames.contains(name)){
foreach(TestObject o in listOfObjects){
if(o.name.equals(name)){
this = o;
break;
}
} else{
setOfNames.Add(name);
this.name = name;
listOfObjects.Add(this);
}
}

因此,我想做的是,如果一个对象以前使用与对象相同的参数创建,我希望该对象指向已经创建的对象,以避免做不必要的工作。

不,这(并非双关语(是不可能的。不能(在类中(重新分配this

所以我想做的是,如果以前创建的对象具有与对象相同的参数,我希望对象指向已经创建的对象,以避免做不必要的工作。

然后你需要一个创建实例的工厂,一个映射和缓存实例的字典,你的类应该实现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和非耦合服务的时代,人们不会使用静态方法,而是使用另一个具有singleton作用域的工厂类
IEquality仍然很有用,因为HashSets和Dictionaries需要一个好的HashCodes。

仅供记录
struct中,this是一个有效的LValue,即您可以在结构代码中为this赋值。例如:

struct Data
{
public int Hi;
public int Lo;
public Data (Data other) {
this = other;
}
}

这是因为ValueTypes的复制语义没有对象标识。但对于RefTypes(又名类(来说是不可能的。

最新更新