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