我想做的实际上是:
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;
}
}
这是因为ValueType
s的复制语义没有对象标识。但对于RefTypes(又名类(来说是不可能的。