閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

C# はオブジェクトの生存期間 (スコープ) を定義できる

あんまり C++ に偏ってもいけないか……ということで。

Java は知らないけれど(後で調べる) C# ではオブジェクトの生存期間を定めることができます。つまり RAII idiom は C# でもできたりします。

>

using System;

namespace raii
{
class hoge : IDisposable
{
public hoge()
{
Console.WriteLine("constructor");
}
~hoge() // デストラクタにはアクセス修飾はしないらしい
{
Console.WriteLine("destructor");
}
public void Dispose() // IDispose から派生する場合、このメソッドの定義が必要
{
// ここに解放時の処理を実装する
Console.WriteLine("dispose");
}

public void print()
{
Console.WriteLine("hogehoge");
}
}

class Program
{
static void Main(string[] args)
{
using (hoge h = new hoge())
{
h.print();
}
using (hoge h = new hoge())
{
h.print();
}
}
}
}