gpt4 book ai didi

c# - 通过继承使用 IDisposable

转载 作者:行者123 更新时间:2023-11-30 19:38:32 31 4
gpt4 key购买 nike

我正在使用继承并试图了解使用 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com