gpt4 book ai didi

.net - 如何在继承自另一个一次性类的类中实现一次性模式?

转载 作者:行者123 更新时间:2023-12-01 11:08:45 25 4
gpt4 key购买 nike

我经常在引用少量资源的简单类中使用一次性模式,但我从来没有在从另一个一次性类继承的类上实现这种模式,我开始对如何释放整个资源感到有些困惑。

我从一些示例代码开始:

public class Tracer : IDisposable
{
bool disposed;
FileStream fileStream;

public Tracer()
{
//Some fileStream initialization
}

public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
if (fileStream != null)
{
fileStream.Dispose();
}
}

disposed = true;
}
}
}

public class ServiceWrapper : Tracer
{
bool disposed;
ServiceHost serviceHost;

//Some properties

public ServiceWrapper ()
{
//Some serviceHost initialization
}

//protected override void Dispose(bool disposing)
//{
// if (!disposed)
// {
// if (disposing)
// {
// if (serviceHost != null)
// {
// serviceHost.Close();
// }
// }

// disposed = true;
// }
//}
}

我真正的问题是:如何在我的 ServiceWrapper 类中实现一次性模式,以确保当我处理它的实例时,它会同时处理继承类和基类中的资源?

谢谢。

最佳答案

我已经看到这是通过几种方式完成的:

  • 在派生类覆盖 Dispose(bool disposing) 中,清理你的东西,然后调用基类 Dispose(bool disposing)。这里的问题是基类已经有处理的门变量和需要复制的检查。
  • 创建一个 protected 清理方法,该方法在基类中调用 Dispose(bool disposing) 以实际执行清理。派生类可以覆盖它,进行清理,并调用基类的清理方法。这将在基类中留下所有不需要复制的已处理检查。
  • 关于.net - 如何在继承自另一个一次性类的类中实现一次性模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571594/

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