通过继承使用IDisposable

mHe*_*pMe 2 .net c# inheritance

我正在使用继承并试图了解使用IDisposable的最佳方法.下面是我的基类的一个例子.

我明白,如果我有一个继承MyBase类的类(允许在MyChild中调用),即使MyChild没有实现IDisposable,如果MyChild初始化,则会执行Dispose方法(相信我的说法是正确的)如果使用的话如下,

using(MyChild chl = new MyChild) {// some code};
Run Code Online (Sandbox Code Playgroud)

我想知道的是,我在MyChild类中有一个对象,我想确保它被处理掉.我是否必须实现IDisposable接口并且具有与MyBase类中几乎相同的代码,或者我可以使用MyBase类中的代码吗?我猜这就是为什么在MyBase类中有一个受保护的虚拟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);
        }
 }
Run Code Online (Sandbox Code Playgroud)

GSe*_*erg 5

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);
    }
}
Run Code Online (Sandbox Code Playgroud)