编写高质量代码改善C#程序的157个建议——建议51:具有可释放字段的类型或拥有本机资源的类型应该是可释放的
建议51:具有可释放字段的类型或拥有本机资源的类型应该是可释放的
在建议50中,我们将C#中的类型分为:普通类型和继承了IDisposable接口的非普通类型。非普通类型除了包含那些托管资源的类型外,本身还包含一个非普通类型的字段。
在标准的Dispose模式中,我们对非普通类型举了一个例子:一个非普通类型AnotherResource。由于AnotherResource是一个非普通类型,所以如果有一个类型,它组合了AnotherResource,那么他就应该继承IDisposable接口:
class AnotherSampleClass : IDisposable { private AnotherResource managedResource = new AnotherResource(); private bool disposed = false; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~AnotherSampleClass() { Dispose(false); } protected virtual void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { // 清理托管资源 if (managedResource != null) { managedResource.Dispose(); managedResource = null; } } disposed = true; } public void SamplePublicMethod() { if (disposed) { throw new ObjectDisposedException("AnotherSampleClass", "AnotherSampleClass is disposed"); } //省略 } }
类型AnotherSampleClass虽然没有包含任何显式的非托管资源,但是由于它本身包含了一个非普通类型,所以我们仍旧必须为它实现一个标准的Dispose模式。
除此之外,类型拥有本机资源(即非托管资源),它也应该继承IDisposable接口。
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步