ネコクラス(Cat.cs)を作成し、名前を付けられた時にNamedイベントが発生する仕組みをデリゲートを使って行ってみます。
NamedEventArgs は EventArgs から派生しており、Named イベントの引数となります。
NamedEventArgs の作成は必須ではありませんが、練習のため(^^;
処理の本体は Program.cs です。NamedEventArgs で条件分岐していますが、sender オブジェクトを使うほうが自然かも。
// Cat.cs
using System;
using System.Drawing;
namespace ConsoleApplication1
{
public class Cat
{
protected string _name;
protected Color _color;
public delegate void NamedEventHandler(object sender, NamedEventArgs e);
public event NamedEventHandler Named;
protected NamedEventArgs _eventArgs;
public Cat(string name, Color color)
{
_name = name;
_color = color;
}
public string Name
{
get
{
return _name;
}
set
{
_name = value;
OnNamed(); // ☆★イベントを発生させる★☆
}
}
public void Mew()
{
Console.WriteLine("にゃぁ");
Console.WriteLine("");
return;
}
protected void OnNamed()
{
if (Named != null)
{
_eventArgs = new NamedEventArgs(_name,_color);
Named(this, _eventArgs);
}
}
}
}
// NamedEventArgs.cs
using System;
using System.Drawing;
namespace ConsoleApplication1
{
public class NamedEventArgs : EventArgs
{
protected string _name;
protected Color _color;
public NamedEventArgs(string name, Color color)
{
_name = name;
_color = color;
}
public NamedEventArgs()
{
_name = null;
_color = Color.Empty;
}
public string Name
{
get
{
return _name;
}
}
public Color BodyColor
{
get
{
return _color;
}
}
}
}
// Program.cs
using System;
using System.Drawing;
namespace ConsoleApplication1
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Cat theCat = new Cat("ネコ",Color.White);
Cat.NamedEventHandler handler = null;
handler = new Cat.NamedEventHandler(Cat_Named);
theCat.Named += handler;
theCat.Mew();
theCat.Name = null;
theCat.Name = "ポチ";
theCat.Name = "クロ太郎";
}
// イベントハンドラの実体
static void Cat_Named(object sender, NamedEventArgs e)
{
NamedEventArgs args = (NamedEventArgs)e;
Console.Write("吾輩は猫である。");
switch(args.Name)
{
case null:
Console.WriteLine("名前はまだ無い。");
break;
case "ポチ":
Console.WriteLine("名前はポチ。犬みたいな名前だな。");
break;
case "クロ太郎":
Console.WriteLine("名前はクロ太郎。白色なんだけど…");
break;
default:
Console.WriteLine("なんなんだろう?");
break;
}
Console.WriteLine("");
}
}
}
上記を実行すると、次のような結果となります。
にゃぁ
吾輩は猫である。名前はまだ無い。
吾輩は猫である。名前はポチ。犬みたいな名前だな。
吾輩は猫である。名前はクロ太郎。白色なんだけど…