2009-05-29 15 views

答えて

2

はい、いくつかの言語があります。 C++/CLIは、ヒープ以外の割り当てがスコープから外れるとIDisposable実装者に対してDipose呼び出しを発行します(通常のC++ではスタック割り当てリソースと同じセマンティクスを効果的に与えます)。さらに、〜ClassnameのC++/CLIデストラクタ構文は、Disposeの実装になり(クラスをIDisposableに実装します)。

伝統的な決定論的破壊を伴う他の言語では、このポリシーが採用されると予想されます。他の人が触れたように、C#で "using"を使ってエミュレートすることはできますが、それは全く同じではありません。

1

IDisposableを実装していて、使用ブロックを使用している場合は、必ず

3

あなたは、メモリ以外のリソースをクリーンアップIDisposableインターを実装し、usingブロックを使用してオブジェクトを作成する必要がある場合。メモリをクリーンアップする必要がある場合は、実際にガベージコレクタに残すことができます。

0

いいえありません。

0

いいえ、.NET言語で確定的な終了はありません。ガベージコレクタは、アプリケーションにルートがないオブジェクトをファイナライズする役割を果たします。

+1

彼はファイナライズについて質問していませんでしたが、彼は通知を受けることを求めていました。 そして、それがどの.NET言語でも利用できないということは、C++/CLI(VS2005で初めて登場したManaged C++の後継バージョン)でプログラミングすると、オブジェクトへの参照を自動変数のように宣言することができます。そのオブジェクトのクラスがIDisposableを実装している場合、スコープから外れたときに通知されます。これは、悲しいことにC#IMHOから欠けている機能です。 – U62

+0

btw。私はdownvotedではなかった! – U62

0

それはIDisposableインターを実装している場合は、あなたのDispose()メソッドを見つけるでしょう:

using (var c = new YourClassImplementsIDisposable()) 
{ 
    // Stuff happens 
} 
// c.Dispose has been called 

そうでなければ、あなたのオブジェクトはちょうどあなたがファイナライザを使用することができGC