首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在继承类中实现配置

如何在继承类中实现配置
EN

Stack Overflow用户
提问于 2016-07-28 09:57:18
回答 1查看 71关注 0票数 0

我在.NET-3.5框架中使用SmtpClient (这意味着它没有实现IDisposable),但希望将它放在如下所示的using语句中:

代码语言:javascript
复制
using (var client = new DisposableSmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false })
{
    client.Send(EmailAddress,
                EmailAddress,
                Subject,
                body);
}

因此,我创建了以下内容:

代码语言:javascript
复制
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

有人能为我指出正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 10:03:48

你不需要处理任何东西,所以你不需要Dispose

去找新的吧:

代码语言:javascript
复制
var client = new SmtpClient("mail.domain.com", 25)
{ Credentials = new NetworkCredential(), EnableSsl = false };

client.Send(EmailAddress,
            EmailAddress,
            Subject,
            body);

2-如果您真的想使用using (我也不知道为什么要使用),您必须实现一个空的dispose (因为您一开始没有什么可处理的):

代码语言:javascript
复制
class DisposableSmtpClient : SmtpClient, IDisposable
{
    public DisposableSmtpClient(string mailServer, int port) : base(mailServer, port)
    {
    }

    public void Dispose()
    {
        // anything to do, so don't do anything.
    }
}

海事组织,接吻是你真正应该考虑的原则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38633018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档