オブジェクトに経験値を追加するEnemy
いくつかのプロパティとメソッドを持つクラスがあるとします。一定量の経験値が経過すると、オブジェクトのプロパティが増加します。AddPoints
Enemy
Level
Enemy
Level
最初は、「経験値がいつ正確な量に達するかわからない場合、プログラムにプロパティを更新させるにはどうすればよいか」と考えました。これにより、イベントについて考えさせられました(イベントが発生するのをリッスンする必要があります。この場合はLevelUp()
メソッドの結果です)ので、次のようなことをすることにしました
private void LevelUp()
{
if (ExperiencePoints > (5 * Level))
{
Level++;
}
}
public void AddPoints(int points)
{
this.ExperiencePoints += points;
LevelUp();
}
このようにして、オブジェクトにポイントが追加されるたびにEnemy
、メソッドは Level プロパティをインクリメントする必要があるかどうかをチェックします。あるメソッドが別のメソッドを呼び出すと、包含/委譲について考える必要があります (1 つのメソッドが別のメソッド内に「ネスト」されています)。このように、私のAddPoints
関数は関数ポインターのように機能します (少なくとも私の頭の中では)。
言語設計の知識や C++/C# の歴史的な知識を持っている人は、これがデリゲートについて考えるのに役立つ方法だと思いますか? 次のコードでは、デリゲートがプログラムを改善できる方法はありますか?それとも単純すぎますか?
完全な敵クラス
class Enemy
{
public int ExperiencePoints { get; set; }
public string Name { get; set; }
private int level;
public int Level
{
get { return level; }
private set { level = value; }
}
private void LevelUp()
{
if (ExperiencePoints > (5 * Level))
{
Level++;
}
}
public void AddPoints(int points)
{
this.ExperiencePoints += points;
LevelUp();
}
public Enemy()
{
ExperiencePoints = 1;
Level = 1;
}
}
テスト
delegate void myDelegate(int x);
class Program
{
static void Main(string[] args)
{
Enemy e = new Enemy();
myDelegate del = e.AddPoints;
e.AddPoints(10); //Level =1 at runtime, after this call Level=2
del(20);//now Level=3
Console.WriteLine(e.Level);//output = 3
}
}