Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让类dispose和继承的类dispose同时运行?_C# - Fatal编程技术网

C# 如何让类dispose和继承的类dispose同时运行?

C# 如何让类dispose和继承的类dispose同时运行?,c#,C#,我的控制器正在使用这个基类: public class BaseController : ApiController { protected JavaCertContext db = new JavaCertContext(); protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); }

我的控制器正在使用这个基类:

public class BaseController : ApiController
{
    protected JavaCertContext db = new JavaCertContext();

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }

        base.Dispose(disposing);
    }
}
在我的几个控制器中,我还需要处理一些其他对象,如:

    protected override void Dispose(bool disposing) 
    {
        if (disposing && _userManager != null)
        {
            _userManager.Dispose();
            _userManager = null;
        }

        base.Dispose(disposing);
    }

在这些控制器中,我如何确保控制器Dispose和它继承的继承Dispose都得到执行?

这正是
base.Dispose(disposing)的作用调用正在进行,即调用基类的dispose方法

正确地遵循以下步骤。它将确保先调用子dispose,然后调用父dispose

 public class BaseController : ApiController
    {
        protected JavaCertContext db = new JavaCertContext();

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }

            base.Dispose(disposing);
        }
    }

    public class ChildController : BaseController
    {
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (_userManager != null)
                {
                    _userManager.Dispose();
                    _userManager = null;
                }
            }

            base.Dispose(disposing);
        }
    }

    public class ApiController
    {
        private volatile bool _isDiposed;

        public void Dispose()
        {
            if (_isDiposed)
            {
                return;
            }

            Dispose(true);

            _isDiposed = true;
        }

        protected virtual void Dispose(bool isDisposing)
        {
            if (isDisposing)
            {
                //Dispose stuff.
            }
        }
    }

    public class JavaCertContext
    {
    }

您正在调用
base.Dispose()
,那么为什么您认为它们不会同时被释放?您能否澄清他的实现与正确的实现之间的区别?