c#中一个类变量赋值给另一个,如何使两个变量的地址不相同
时间: 2024-05-03 09:18:24 浏览: 8
在C#中,类变量是引用类型,如果想要将一个类变量赋值给另一个变量,可以使用浅拷贝或深拷贝的方式。
浅拷贝会创建一个新的变量,但是两个变量所引用的对象是相同的,这意味着修改其中一个变量所引用的对象的属性会影响到另一个变量所引用的对象。如果想要使两个变量的地址不相同,可以使用深拷贝。
深拷贝会创建一个新的对象,将原始对象的所有属性值复制到新对象中,然后将新对象的引用返回给调用者。这意味着两个变量所引用的对象是不同的,修改其中一个变量所引用的对象的属性不会影响到另一个变量所引用的对象。
以下是一个示例代码,演示如何使用深拷贝来使两个变量的地址不相同:
```csharp
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class MyClass {
public int MyProperty { get; set; }
}
class Program {
static void Main(string[] args) {
MyClass obj1 = new MyClass { MyProperty = 1 };
MyClass obj2 = DeepCopy(obj1);
Console.WriteLine(obj1 == obj2); // false
}
// 实现深拷贝的方法
public static T DeepCopy<T>(T obj) {
using (var ms = new MemoryStream()) {
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
}
```
在上面的示例中,使用了 BinaryFormatter 类来将对象序列化和反序列化,从而实现深拷贝。