C#委托的示例,使用委托执行函数动作链,实现对swich case 的替换

借用一下老师的图, 让你知道我要干什么

建议先看看:C# 委托(Delegate) | 菜鸟教程 (runoob.com)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp6
{
    delegate int[] Move(int x,int y);//建立一个移动的委托,委托类似于C中函数指针,方便执行函数动作连

    class Program
    {
        //建立了4个移动命令,分别是上下左右,有需要可以自己自行添加
        public static int[] moveUp(int x,int y )
        {
            int[] arr = { x, ++y };//注意++在前,先让他自加一再返回
            return arr;
        }
        public static int[] moveDown(int x,int y)
        {
            int[] arr = { x, --y };
            return arr;
        }
        public static int[] moveLeft(int x, int y)
        {
            int[] arr = { --x, y };
            return arr;
        }
        public static int[] moveRight(int x, int y)
        {
            int[] arr = { ++x, y };
            return arr;
        }
        static void Main(string[] args)
        {
            //创建一个方法列表,这里就体现出来委托的作用了,不然尖括号里你写什么才能向列表里添加方法呢
            List<Move> methods=new List<Move>();
            methods.Add(moveUp);
            methods.Add(moveDown);
            methods.Add(moveLeft);
            methods.Add(moveDown);
            int initx = 0;
            int inity = 0;
            String[] str = { "1", "2", "3", "2", "4", "3", "4", "1", "1", "3" };//你要执行的命令
            //如果没看懂下面for循环,看看下面的注释你就知道它是干什么用的了,没错那就是对swich case 的替换作用
            //委托这东西,仁者见仁智者见智吧,你觉得那种方式更好就用哪种,我自己的看法是委托能让代码结构更加清晰整洁,方便后期的维护与管理(修改函数就可以改变效果)

            for(int i = 0; i < str.Length; i++)
            {
                Move move=methods[Convert.ToInt32(str[i]) -1];
                int[] result= move(initx, inity);
                initx = result[0];
                inity = result[1];
                Console.WriteLine(initx + "," + inity);
            }
            
            Console.ReadKey();
            
            //for (int j = 0; j < str3.Length; j++)
            //{

            //    switch (str3[j])
            //    {
            //        case "0":

            //            currentY = currentY - 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;

            //        case "1":
            //            currentX = currentX + 1;
            //            currentY = currentY - 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        case "2":
            //            currentX = currentX + 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        case "3":
            //            currentX = currentX + 1;
            //            currentY = currentY + 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        case "4":

            //            currentY = currentY + 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        case "5":
            //            currentX = currentX - 1;
            //            currentY = currentY + 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        case "6":
            //            currentX = currentX - 1;

            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        case "7":
            //            currentX = currentX - 1;
            //            currentY = currentY - 1;
            //            image.SetPixel(currentX, currentY, Color.Red);
            //            break;
            //        default:
            //            break;
            //    }
            //}
        }
        
    }
}

猜你喜欢

转载自blog.csdn.net/Starry_error/article/details/124594100
今日推荐