zoukankan      html  css  js  c++  java
  • 编写高质量代码改善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个建议》陆敏技

  • 相关阅读:
    Github简单使用
    软件架构
    软件架构
    软件架构
    VB.net 捕获项目全局异常
    C#里面的三种定时计时器:TIMER
    深入分析委托与事件
    C#预处理器指令
    C# 实现透明可移动窗体
    多元一次方程解法 C++
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4734500.html
Copyright © 2011-2022 走看看