【コンソール】イベントのサンプル
イベントのシミュレーションサンプルになります
サンプルを読むには、クラスやインスタンスの概念も必要になります
サンプル
このサンプルはイベントの学習用です
学習を意識しなければ、イベントを使わなくても同じ結果が得られます
コード行も数行で終わります
大規模なアプリを想定したコードとなっていることを念頭においてください
コード
Mainメソッドが見当たらないのは、トップレベルステートメント(最上位レベルのステートメント)を使っているからです(トップレベルステートメントについては、参考ページで確認してください)
var gameManager = new GameManager();
gameManager.ButtonClickSim();
class GameManager
{
MyEvnet myButtonEvent = new();
public void ButtonClickSim()
{
var args1 = new MyEventArgs();
var button1 = new Button("button1");
args1.point = 10;
ClickButton(button1, args1);
var args2 = new MyEventArgs();
var button2 = new Button("button2");
args2.point = 20;
ClickButton(button2, args2);
}
private void ClickButton(Button button, MyEventArgs args)
{
myButtonEvent.handler += button.Clicked;
myButtonEvent.Invoke(button, args);
myButtonEvent.handler -= button.Clicked;
}
}
public class MyEventArgs
{
public int point;
}
public class MyEvnet
{
public delegate void MyEventHandler(object obj, MyEventArgs args);
public event MyEventHandler? handler;
public void Invoke(object sender, MyEventArgs e)
{
handler?.Invoke(sender, e);
}
}
public class Button
{
public string? Name { get; private set; }
public Button(string name)
{
Name = name;
}
public void Clicked(object sender, MyEventArgs e)
{
Console.WriteLine($"ボタンが押された オブジェクト名{(sender as Button)?.Name} ポイント{e.point}");
}
}
実行結果
ボタンが押された オブジェクト名button1 ポイント10
ボタンが押された オブジェクト名button2 ポイント20
参考
トップレベルステートメント
イベントハンドラの定義をSystem名前空間の定義済みのを使った場合
var gameManager = new GameManager();
gameManager.ButtonClickSim();
class GameManager
{
MyEvnet myButtonEvent = new();
public void ButtonClickSim()
{
var args1 = EventArgs.Empty;
var button1 = new Button("button1");
ClickButton(button1, args1);
var args2 = EventArgs.Empty;
var button2 = new Button("button2");
ClickButton(button2, args2);
}
private void ClickButton(Button button, EventArgs args)
{
myButtonEvent.handler += button.Clicked;
myButtonEvent.Invoke(button, args);
myButtonEvent.handler -= button.Clicked;
}
}
public class MyEvnet
{
public event EventHandler? handler;
public void Invoke(object sender, EventArgs e)
{
if (handler == null)
{
return;
}
handler(sender, e);
}
}
public class Button
{
public string? Name { get; private set; }
public Button(string name)
{
Name = name;
}
public void Clicked(object? sender, EventArgs e)
{
Console.WriteLine($"ボタンが押された オブジェクト名{(sender as Button)?.Name}");
}
}
ディスカッション
コメント一覧
まだ、コメントがありません