C#类解构器是否会从内存中删除/销毁类实例?
解构器对C#类生命周期的影响
解构器完全不会影响类的生命周期——它就是个用来批量提取类成员值的语法糖,本质就是个普通方法调用,没那么多“特殊能力”。
- 解构的核心逻辑就是把类实例里的字段/属性值,复制到你定义的外部变量里,仅此而已。执行解构时,只是读取原实例的成员数据:值类型直接复制值,引用类型复制引用,不会对原实例做任何销毁、移除引用的操作。
- 类实例什么时候被回收,完全由.NET的垃圾回收器(GC)说了算:只有当没有任何活跃的引用指向这个实例时,GC才会在合适的时机把它回收掉。解构操作既不会主动移除现有引用,也不会强制触发GC。
给你举个实际代码例子就懂了:
public class Person { public string Name { get; set; } public int Age { get; set; } // 解构方法 public void Deconstruct(out string name, out int age) { name = Name; age = Age; } } // 使用解构器 var person = new Person { Name = "Alice", Age = 30 }; var (name, age) = person; // 这里只是把person的Name和Age读出来赋值给name、age Console.WriteLine(person.Name); // 解构后person实例还好好的,照样能访问
你看,解构完之后person变量依然握着对实例的引用,实例根本不会被回收。只有等person变量超出作用域,或者被赋值成null,而且没有其他地方再引用这个实例时,GC才会考虑回收它。
内容的提问来源于stack exchange,提问作者Mufasatheking
相关产品推荐
相关产品推荐

