C#延拓方法的奇异行为

C#延拓方法的奇异行为,c#,extension-methods,C#,Extension Methods,我在扩展方法上遇到了一个非常奇怪的情况,下面是我的示例代码: AType anObject = new AType(); AType myObject = new AType(); myObject=anObject; myObject.ExtensionMethods(); 在扩展方法之后,我发现一个对象的属性随myObject而改变。我不太明白为什么。扩展方法不应该只对myobject起作用吗 多谢各位 下面是我如何使用extions方法的 public static AType Exte

我在扩展方法上遇到了一个非常奇怪的情况,下面是我的示例代码:

AType anObject = new AType();
AType myObject = new AType();
myObject=anObject;
myObject.ExtensionMethods();
在扩展方法之后,我发现一个对象的属性随myObject而改变。我不太明白为什么。扩展方法不应该只对myobject起作用吗

多谢各位

下面是我如何使用extions方法的

public static AType ExtensionMethods(this AType aType)
{   
    //do something here to aType
    return aType;
}

谢谢。

这与扩展方法无关,一切都与您在这里所做的有关:

myObject=anObject;

在该行之后,两个变量都指向内存中的同一个对象实例。因此,对一个变量所做的任何更改都将反映在另一个变量中,因为只有一个对象。(以前还有第二个对象,但一旦您不再有对它的引用,垃圾收集器就会很快将其从内存中清除。即使没有,您仍然没有对它的引用,因此无法使用它。)
AType
是引用类型,因此
myObject
anObject
都指向
AType
类的同一实例,您只是在调用扩展方法
anObject==myObject
之前这样做的。您已将同一对象分配给两个变量。原始
myObject
未被引用且无法访问。这将是GC'ed。谢谢。那么,我如何正确地复制一个实例,以便只在myObject上使用扩展方法呢?@khuang:你的确切意思是什么?你到底想做什么?因为我需要在一个对象上测试许多扩展方法,并且希望同时显示不同的结果。因此,创建一个对象的多个副本听起来很容易进行测试?@khuang:好吧,不管“问题”是什么,问题中都没有提到。但不管怎样,很高兴我能帮上忙!