C# 如何让引用变量重新指向之前已创建的类实例?
原因说明
你现在的代码里无法找回首次创建的Info实例,原因很简单:你没有用额外的变量保存该实例的引用。当你执行APersonsAccount = new Info()创建第二个实例时,APersonsAccount原本指向第一个实例的引用就被覆盖了,没有任何引用指向的第一个实例会被.NET垃圾回收机制自动清理,内存被释放后自然无法再访问。
可行实现方案
- 提前备份首个实例的引用(最推荐)
只需要多定义一个变量存储第一个实例的引用,后续需要恢复指向时直接赋值即可,修改后的代码示例如下:
class Info { public string Name; public int Age; } class Program { static void Main() { Info APersonsAccount; APersonsAccount = new Info(); APersonsAccount.Name = "NameOfPerson"; APersonsAccount.Age = 23; // 新增变量备份第一个实例的引用 Info firstInstanceBackup = APersonsAccount; Console.WriteLine("Name: {0,-15} Age: {1,-20}", APersonsAccount.Name, APersonsAccount.Age); APersonsAccount = new Info(); APersonsAccount.Name = "OtherName"; APersonsAccount.Age = 25; Console.WriteLine("Name: {0,-15} Age: {1,-20}", APersonsAccount.Name, APersonsAccount.Age); // 恢复指向首个实例 APersonsAccount = firstInstanceBackup; // 此处输出为首个实例的属性:Name: NameOfPerson Age: 23 Console.WriteLine("Name: {0,-15} Age: {1,-20}", APersonsAccount.Name, APersonsAccount.Age); } }
- 实例状态备份(适用于需要保存固定时间点状态的场景)
如果你需要备份的是实例某个时间点的属性状态(即使后续原实例属性被修改,备份也不受影响),可以给Info类添加克隆方法做深拷贝,需要恢复时直接用备份的属性重建实例即可。
特殊情况说明
如果你没有提前做任何引用或者状态备份,第一个实例已经被垃圾回收释放的话,这种情况下你确实只能重新创建一个属性和第一个实例完全一致的新实例,已经被清理的原实例是无法找回的。
内容的提问来源于stack exchange,提问作者CodingBeginner
相关产品推荐
相关产品推荐

