调用函数和/或委托的函数

时间:2013-07-18 14:29:09

标签: c# delegates

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


        }
    }

0 个答案:

没有答案