「C Sharp/イベント」の版間の差分
< C Sharp
ナビゲーションに移動
検索に移動
imported>Administrator |
imported>Administrator (→関連項目) |
||
74行目: | 74行目: | ||
* [[デリゲート]] | * [[デリゲート]] | ||
* [[関数ポインタ]] | * [[関数ポインタ]] | ||
+ | * [[C Sharp|C#]] | ||
+ | * [[イベント]] | ||
== 参考文献 == | == 参考文献 == |
2012年4月26日 (木) 04:47時点における版
C#におけるイベント(event)とは、デリゲート(≒関数ポインタ)に対し、外部から追加(+=演算子)と削除(-=演算子)のみを行えるように隠蔽し、かつ宣言したクラスからしか呼べない(実行できない)ようにする機能のことである。
イベントは、素のデリゲートがオブジェクト指向の本質の一つである隠蔽の原則に反するために用意されているものであり、イベントを使える場合には積極的にイベントを使ってデリゲートを隠蔽しましょうと言われている。
使用例
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);
}
}
イベントを使わずにデリゲートだけを用いて書くと以下のようになる。 得られる結果は同じだが、AppMainクラスではない別のクラスからもデリゲートを実行できてしまう。
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);
}
}
関連項目
参考文献