0

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


        }
    }
4

0 回答 0