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

c#

我想要做的是这实际上是:

this = object1
this = object1

其中 this 是类中使用的“this”关键字,object1 是我希望“this”指向的对象。那可能吗?

基本上,我想要

this == object1

评估为真。

为清楚起见编辑:

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

回答

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

  • ...在一个班级。有点奇怪的是 IMO,您可以在结构中重新分配 `this`。

回答

只是为了记录。
在 a 中structthis是一个有效的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。


以上是使一个对象的实例指向另一个对象的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>