假设我有一个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 属性是否需要增加。让一种方法调用另一种方法会考虑包含/委托(一种方法“嵌套”在另一种方法中)。这样,我的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
}
}