假设我有一个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
}
}