C# 要处置对象,是否应将所有属性设置为null?
我目前正在尝试在我的一些对象上实现我的第一个dispose,我想知道检查每个反射的所有属性并将它们设置为null是否是一个坏主意?是的,这是一个坏主意 首先,一些属性可能是实现C# 要处置对象,是否应将所有属性设置为null?,c#,dispose,C#,Dispose,我目前正在尝试在我的一些对象上实现我的第一个dispose,我想知道检查每个反射的所有属性并将它们设置为null是否是一个坏主意?是的,这是一个坏主意 首先,一些属性可能是实现IDisposable接口的类,因此必须首先对它们调用Dispose方法 然后,如果您的一个属性是一个依赖COM组件或使用某些组件的类,则必须正确地处理它,否则将导致内存泄漏实现IDisposable并不意味着您必须将所有字段设置为null。当无法从根对象访问它们时,GC将处理这些问题 设置null将不起任何作用,直到GC
IDisposable
接口的类,因此必须首先对它们调用Dispose
方法
然后,如果您的一个属性是一个依赖COM组件或使用某些组件的类,则必须正确地处理它,否则将导致内存泄漏实现
IDisposable
并不意味着您必须将所有字段设置为null
。当无法从根对象访问它们时,GC将处理这些问题
设置null
将不起任何作用,直到GC注意到它没有管理任何引用,对象仍将在内存中
在我看来,没有比这更全面的答案了
仅当只剩下一个托管引用时,设置null才有帮助,尽管您不需要它,但您需要保持封装类型处于活动状态,然后将引用设置为null
。否则,如果封装类型本身不可访问,则设置null
没有任何意义