c#勉強---using
c#のusingは、プログラムセットを参照する以外に、次のようにします.
もう一つ重要な使い方があります.
私たちはシステムを知っています.objectにはFinalize()が虚関数であり,GCでごみ回収を行う際に用いられるが,一般的には自己表示のクリーンアップロジックは用いられないが,一般的にはoverride Finalize()が考えられる.
しかし、c#がそんなことを許さないのはおかしい.構造関数を追加するしかありません.
さらに、クラスタイプが処理可能である場合、つまりIDisposableインタフェースがサポートされている場合、Dispose()を呼び出すことができます.
もちろん、現在のタイプがIDisposableをサポートしているかどうかを判断したほうがいいです.
IDisposableが実装された処理では、一般的に構造化された例外処理を使用して、Dispose()呼び出しを保証します.
明らかにtry/finallyに各処理可能なタイプを含めるのは受け入れられず、usingの別の用途があります.
CILコードではtry/finallyですが、私たちのコードの作成と読書はもっと受け入れられます.
using System;
using System.Collections.Generic;
もう一つ重要な使い方があります.
私たちはシステムを知っています.objectにはFinalize()が虚関数であり,GCでごみ回収を行う際に用いられるが,一般的には自己表示のクリーンアップロジックは用いられないが,一般的にはoverride Finalize()が考えられる.
{
protected override Finalize()
{
//do something
}
}
しかし、c#がそんなことを許さないのはおかしい.構造関数を追加するしかありません.
class a
{
~a()
{
Console.WriteLine("I am dead!");
}
}
さらに、クラスタイプが処理可能である場合、つまりIDisposableインタフェースがサポートされている場合、Dispose()を呼び出すことができます.
class a : IDisposable
{
public void Dispose()
{
// 。。。。
// and something else
}
}
もちろん、現在のタイプがIDisposableをサポートしているかどうかを判断したほうがいいです.
。。。。
if (a is IDisposable)
a.Dispose();
IDisposableが実装された処理では、一般的に構造化された例外処理を使用して、Dispose()呼び出しを保証します.
try
{
// a
}
finally
{
a.Dispose();
}
明らかにtry/finallyに各処理可能なタイプを含めるのは受け入れられず、usingの別の用途があります.
using(a mya=new a())
{
// mya
}
CILコードではtry/finallyですが、私たちのコードの作成と読書はもっと受け入れられます.