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个建议》陆敏技

  • 相关阅读:
    js定位光标到输入框指定位置
    JS获取本机时间和实时动态时间代码
    一个小游戏
    select optionschange oeder
    js控制下拉列表框
    glow滤镜的使用
    body.innerHTML
    怎样用C语言编写病毒(三)
    2011东北地区赛G题(二分网络流判可行性)
    Codeforces Round #122 (Div. 1)>TLE代码 跪求(n^2)的最小割顶集算法(StoerWagner)
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4734500.html
Copyright © 2011-2022 走看看