この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 20506|答える: 1

[出典] C# Deep Dive - デストラクターズ

[リンクをコピー]
掲載地 2018/08/17 13:54:43 | | |
デストラクタはC#ではほとんど使われないため、多くの人が忘れてしまいましたが、ほとんど役に立たず、研究も無意味です。

1。        デストラクターの特徴:

デストラクターはクラスにのみ存在し、構造には存在できません。 デストラクタはアクセス制御修飾子、静的修飾子、抽象修飾子、仮想修飾子など、いかなる修飾子も持てません。 デストラクタにはパラメータがないため、過負荷は起こりません。

2。        デストラクターを呼び出すタイミング:

デストラクターは、オブジェクトがゴミ収集機によってリサイクルされるときに呼ばれますが、ゴミ収集機には怠惰な特性があります。
変数がスコープとライフタイムを離れた後すぐにリサイクルするわけではなく、通常はメモリが不足していると判断した場合にのみ再利用します。 例えば:

メソッドbtn_Click戻った後、deは終了されるはずですが、そのデストラクタは呼び出されず、ガベージコレクタがリサイクルしていないことを示しています。 フォームを閉じるとデストラクタが実行され、プログラム終了時にゴミ収集機がしぶしぶリサイクルを強いられることを示します(^-^)。
もちろん、GC.Collect()を呼び出してリサイクルを強制することもできます:

btn1をクリックすると、de1と新しいDemo()が終了し、デストラクタが呼び出されます。
de2はまだ寿命を切れていないため、GC.Collectメソッドが呼ばれてもリサイクルされません。btn1_Clickが戻るとde2は寿命を切っていますが、ゴミ収集機の怠慢によりリサイクルされません。 btn2がGC.Collectメソッドを呼び出して初めてde2が回収され、そのデストラクタが呼び出されます。

デストラクタ呼び出しを防ぐ一つの方法は、IDisposableインターフェースを実装することです。これは一意のメソッド「Dispose()」を定義しています。
これにより、デストラクタが内部的に呼び出されるのを防ぎ、退屈な場合はGC.SuppressFinalize(^-^)を呼び出さずにこのインターフェースを実装できます。SuppressFinalize()はディスストラクタをブロックしないため意味がありません。

これでde1のデストラクターは呼び出されません。

3。        デストラクターの本質:

デストラクタとは本質的に以下の形式をとる手法です:

通常、デストラクタはシステム自身が呼び出せるものではなく、プログラマー自身が呼び出すものではないと考えますが、これは完全に正しくはなく、デストラクタは明示的に呼び出すこともできます。結局のところ、デストラクタは単なるメソッドに過ぎません。

クラス内で管理されていないリソースが開かれない限り、デストラクターは必要ありません





先の:C# Distinctは条件付きでオブジェクトの重複を除去します
次に:例外メッセージ:「StrongTypingException: IsPrima...
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com