差分

ナビゲーションに移動 検索に移動

C Sharp/イベント

2,766 バイト追加, 2012年4月26日 (木) 04:47
ページの作成:「C#における'''イベント'''(event)とは、デリゲート(≒関数ポインタ)に対し、外部から追加(+=演算子)と削...」
[[C Sharp|C#]]における'''イベント'''(event)とは、[[デリゲート]](≒[[関数ポインタ]])に対し、外部から追加(+=演算子)と削除(-=演算子)のみを行えるように[[隠蔽]]し、かつ宣言した[[クラス]]からしか呼べない(実行できない)ようにする機能のことである。

イベントは、素の[[デリゲート]]が[[オブジェクト指向]]の本質の一つである[[隠蔽]]の原則に反するために用意されているものであり、イベントを使える場合には積極的にイベントを使ってデリゲートを隠蔽しましょうと言われている。

== 使用例 ==
<source lang="csharp">
using System;

// デリゲート型の定義
public delegate void SomeDelegate(string name);

class AppMain
{
// イベント変数の宣言
// 書式は、呼び出し制限したいデリゲート名 公開するイベント名
public event SomeDelegate SomeEvent;

static void Main(string[] args)
{
new AppMain().Run();
Console.ReadLine();
}

void Run()
{
// ここでは内部からだが、外部からも追加削除はできる。
SomeEvent += new SomeDelegate(Func1);
// 外部からは呼び出せない。
SomeEvent("いべんと");
}

void Func1(string name)
{
Console.WriteLine("こんにちは, " + name);
}
}
</source>

イベントを使わずにデリゲートだけを用いて書くと以下のようになる。
得られる結果は同じだが、AppMainクラスではない別のクラスからもデリゲートを実行できてしまう。
<source lang="csharp">
using System;

// デリゲート型の定義
public delegate void SomeDelegate(string name);

class AppMain
{
// デリゲート変数の宣言
// 書式は、呼び出し制限したいデリゲート名 公開するイベント名
public SomeDelegate DelegateInstance;

static void Main(string[] args)
{
new AppMain().Run();
Console.ReadLine();
}

void Run()
{
this.DelegateInstance += new SomeDelegate(Func1);
// ここでは内部から呼んでいるが、外部からも呼び出せてしまう。
this.DelegateInstance("でりげーと");
}

void Func1(string name)
{
Console.WriteLine("こんにちは, " + name);
}
}
</source>

== 関連項目 ==
* [[デリゲート]]
* [[関数ポインタ]]

== 参考文献 ==
<references/>

== 外部リンク ==

{{stub}}
匿名利用者

案内メニュー