私は(それがIDisposable
を実装していないという意味)。NET-3.5フレームワークでSmtpClient
を使用していますが、そうのような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);
}
}
メッセージを送信するための細かい動作しますが、デバッグするとき、それは(this.Dispsoe();
だけで永遠に自分自身を呼び出すように)StackOverflow
例外がスローされます。
他の多くの質問によれば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
はこれで正しい方向に私を指すことができ、誰になってしまいますか?
なぜこれをやろうとしていますか?実際には何も処理していないので、どうして気になるのですか? – Maarten
@Maarten 'SmtpClient'の後の実装で' IDisposable'が実装されているので、 'Send'を呼び出した後にまだ残っているリソースがあると思いますか? – Bassie
しかし、空のDisposeメソッドを追加しても何もしません。あなたは何かをきれいにするために何かを実際に行う必要があります。 – Maarten