我在.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);
}
}它可以很好地发送消息,但是在调试时,它会抛出一个StackOverflow异常(因为this.Dispsoe();将永远调用自己)。
我试着打电话给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
有人能为我指出正确的方向吗?
发布于 2016-07-28 10:03:48
你不需要处理任何东西,所以你不需要Dispose。
去找新的吧:
var client = new SmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false };
client.Send(EmailAddress,
EmailAddress,
Subject,
body);2-如果您真的想使用using (我也不知道为什么要使用),您必须实现一个空的dispose (因为您一开始没有什么可处理的):
class DisposableSmtpClient : SmtpClient, IDisposable
{
public DisposableSmtpClient(string mailServer, int port) : base(mailServer, port)
{
}
public void Dispose()
{
// anything to do, so don't do anything.
}
}海事组织,接吻是你真正应该考虑的原则。
https://stackoverflow.com/questions/38633018
复制相似问题