如何在继承中实现 Dispose Class
How to Implement Dispose In Inheriting Class
我在 .NET-3.5 框架中使用 SmtpClient
(这意味着它没有实现 IDisposable
),但我想将其放在 using 语句中,如下所示:
using (var client = new DisposableSmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false })
{
client.Send(EmailAddress,
EmailAddress,
Subject,
body);
}
所以我创建了以下内容:
class DisposableSmtpClient : SmtpClient, IDisposable
{
bool disposed;
public DisposableSmtpClient(string mailServer, int port) : base(mailServer, port)
{
// var client = new SmtpClient(mailServer, port);
}
public void Dispose()
{
this.Dispose();
GC.SuppressFinalize(this);
}
}
这对于发送消息来说工作正常,但在调试时,它会抛出一个 Whosebug
异常(因为 this.Dispsoe();
将永远调用自己)。
我尝试根据许多其他 SO 问题调用 this.Dispose(true)
,但这抱怨 No overload for method 'Dispose' takes 1 arguments
。
base.Dispoe()
也有效,因为当然 'SmtpClient' does not conatin a definition for 'Dispose'
最后,我也尝试了签名protected override void Dispose(bool disposing)
,但我得到Dispose(): no suitable method found to override
有人能用这个给我指明正确的方向吗?
1 - 你不需要处理任何东西,所以你不需要 Dispose
.
换新的:
var client = new SmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false };
client.Send(EmailAddress,
EmailAddress,
Subject,
body);
2 - 如果你真的想使用using
(我不知道你为什么要这样做),你必须实现一个空处置(因为你没有任何东西可以开始处理):
class DisposableSmtpClient : SmtpClient, IDisposable
{
public DisposableSmtpClient(string mailServer, int port) : base(mailServer, port)
{
}
public void Dispose()
{
// anything to do, so don't do anything.
}
}
IMO,KISS 是你真正应该考虑的原则。
我在 .NET-3.5 框架中使用 SmtpClient
(这意味着它没有实现 IDisposable
),但我想将其放在 using 语句中,如下所示:
using (var client = new DisposableSmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false })
{
client.Send(EmailAddress,
EmailAddress,
Subject,
body);
}
所以我创建了以下内容:
class DisposableSmtpClient : SmtpClient, IDisposable
{
bool disposed;
public DisposableSmtpClient(string mailServer, int port) : base(mailServer, port)
{
// var client = new SmtpClient(mailServer, port);
}
public void Dispose()
{
this.Dispose();
GC.SuppressFinalize(this);
}
}
这对于发送消息来说工作正常,但在调试时,它会抛出一个 Whosebug
异常(因为 this.Dispsoe();
将永远调用自己)。
我尝试根据许多其他 SO 问题调用 this.Dispose(true)
,但这抱怨 No overload for method 'Dispose' takes 1 arguments
。
base.Dispoe()
也有效,因为当然 'SmtpClient' does not conatin a definition for 'Dispose'
最后,我也尝试了签名protected override void Dispose(bool disposing)
,但我得到Dispose(): no suitable method found to override
有人能用这个给我指明正确的方向吗?
1 - 你不需要处理任何东西,所以你不需要 Dispose
.
换新的:
var client = new SmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false };
client.Send(EmailAddress,
EmailAddress,
Subject,
body);
2 - 如果你真的想使用using
(我不知道你为什么要这样做),你必须实现一个空处置(因为你没有任何东西可以开始处理):
class DisposableSmtpClient : SmtpClient, IDisposable
{
public DisposableSmtpClient(string mailServer, int port) : base(mailServer, port)
{
}
public void Dispose()
{
// anything to do, so don't do anything.
}
}
IMO,KISS 是你真正应该考虑的原则。