c# - 通过继承使用 IDisposable

标签 c# .net inheritance

我正在使用继承并试图了解使用 IDisposable 的最佳方式。下面是我的基类的示例。

我知道如果我有一个继承自 MyBase 类的类(让调用 MyChild),即使 MyChild 没有实现 IDisposable,如果 MyChild 被初始化,Dispose 方法将被执行(相信我说的是正确的) 如果像下面这样使用,

using(MyChild chl = new MyChild) {// some code};

不过我想知道的是,我想确保在 MyChild 类中有一个对象已被处置。我是否必须实现 IDisposable 接口(interface)并拥有与我在 MyBase 类中几乎相同的代码,或者我是否可以使用 MyBase 类中的代码?我猜这就是为什么在 MyBase 类中有一个 protected 虚拟 Dispose 方法?

我的基类

 public class MyBase : IDisposable
 {
        // variables & methods declared here etc

        public void Dispose()
        {
            Dispose(true);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (myObj != null) releaseObject(myObj);
            }
        }

        private static void releaseObject(object obj)
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        }
 }

最佳答案

void Dispose(bool disposing)protected virtual 是有原因的。您应该覆盖它(并调用基本版本)。

public class MyChild : MyBase
{
    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Dispose Child's objects
        }

        base.Dispose(disposing);
    }
}

关于c# - 通过继承使用 IDisposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452353/

相关文章:

.net - 如何将类库项目转换为NuGet包

C++ 多重继承和虚表

c++ - { token 之前的预期类名 - 非常简单

c# - C# 中的简单游戏,仅包含 native 库

c# - 查询sql数据库

c# - Unity 使用触摸旋转相机 - 移动

c# - 我如何在unity3d中制作3dObjects infront gui纹理

.net - 如何连接到双击 Ctrl 键?

.net - VB.NET 读取文本区域中的当前行?

inheritance - Rails : ActiveRecord's default_scope and class inheritance