3

私は次のクラスを持っています:

public class MailData : IDisposable
{
  public IDictionary<String, Tuple<Byte[], String>> Attachments { get; set; }
  public String From { get; set; }
  public IList<String> To { get; set; }   
  public MailType Type { get; set; }
} // MailData

クラスを処分する正しい方法は何でしょうか?

つまり、私はすべてを削除する必要があると思いByte[]ますDictionary...

他のプロパティはどうですか?

4

4 に答える 4

4

.NET は管理された環境であり、ガベージ コレクターがその仕事を実行できるようにする必要があります。単純な参照クラスを破棄する理由はなくbyte[]、参照のままです。

通常、このDisposeパターンを使用して、ファイル I/O、さまざまなストリーム、データベース接続などの貴重なリソースを手放します。

ただし、あなたの場合、自分で何もする必要はありません。

C# のマネージの世界へようこそ。

于 2013-03-23T13:53:38.233 に答える
1

MailTypeクラスも使い捨てでない限り、何もする必要はありません。コレクションが範囲外になった後、しばらくしてその内容とともにガベージ コレクションが行われるため、コレクションをクリアする必要はありません。

于 2013-03-23T13:54:09.740 に答える
1

MailTypeに管理されていないリソースがない限り、何もする必要はありません。その場合、このクラスの Dispose をオーバーライドして、MailType オブジェクトの Dispose を呼び出す必要があります。

また、ディクショナリ内のバイト数が多い場合は、インスタンスをusingステートメントでラップする必要があります。

using(var m = new MailData())
{
   // use the object here

} // the m.Dispose() gets called here
于 2013-03-23T14:00:35.193 に答える
0

まず、どのメソッドを実装する必要があるかを検討する必要があります。ここで興味深い記事を見つけることができます 。これらのメソッドでは、管理されていないリソースを解放するだけで済みます。管理されていないリソースの詳細については、こちらをご覧ください。また、dispose を呼び出してアンマネージ リソースを明示的に解放するのか、それとも暗黙的に Finalize を呼び出して GC に解放させるのか、自問してみてください。

お役に立てば幸いです、Xaser

于 2013-03-23T14:00:12.830 に答える