zoukankan      html  css  js  c++  java
  • C#委托。

    什么是委托。

    委托是一种数据类型。

    委托的作用。

    把变化的东西封装起来。

    委托是引用变量,声明后不赋值为null   所以使用前校验非空。

    class Program
        {
            static void Main(string[] args)
            {
                //2、使用委托。
                // 先new一个委托类型的对象,并传递方法进去。即md委托保存了M1方法。
                MyDelegate md = new MyDelegate(M1);
                //调用md委托就是调用M1方法
                md();
                
                
            }
            static void M1()
            {
                Console.WriteLine("一个没有参数没有返回值的方法");
            }
        }
        //1、定义委托类型
        //定义一个委托类型,用来保存无参数,无返回值的方法。
        public delegate void MyDelegate();

    目前来看,委托没啥毛用,直接调用M1不就得了?

    下面程序的作用是,传入一个字符串,把每个人名都加上*

    class Program
        {
            static void Main(string[] args)
            {
                string[] name = new string[] { "Sam", "Jill", "Penny" };
                MyClass mc = new MyClass();
                mc.Change(name);
                for (int i = 0; i < name.Length; i++)
                {
                    Console.WriteLine(name[i]);
                }
            }
        }
        public class MyClass
        {
          public void Change(string[] str)
            {
                for (int i = 0; i < str.Length; i++)
                {
                    str[i] = "*" + str[i] + "*";
                }
            }
        }
        

    但是现在需求变了,把每个人名都换成大写。  就需要改变代码。

    而代码部分,只有str[i] = "*" + str[i] + "*";  是变化的。

    就可以把这段代码封装起来。

    class Program
        {
            static void Main(string[] args)
            {
                string[] name = new string[] { "Sam", "Jill", "Penny" };
                MyClass mc = new MyClass();
                mc.Change(name,ChangeValue);
                for (int i = 0; i < name.Length; i++)
                {
                    Console.WriteLine(name[i]);
                }
            }
            static string ChangeValue(string str)
            {
                return str.ToUpper();
            }
           
        }
        public class MyClass
        {
          public void Change(string[] str,ChangeDelegate ChangeValue)
            {
                for (int i = 0; i < str.Length; i++)
                {
                    str[i] = ChangeValue(str[i]);
                }
            }
        }
        public delegate string ChangeDelegate(string str);
  • 相关阅读:
    redhat 找不到eth0等网卡设备
    oracle12.2 windows 安装卸载重新学习
    Ubuntu官方推荐U盘镜像写入工具(转载别人的)
    linux sh 脚本获取命令结果变变量然后post
    img图片过长自动截取隐藏
    python 数字类型
    Pycharm 常用快捷键 转自 暮良文王
    #python输入输出
    勤学如春起之苗,不见其增日有所长。缀学如磨刀之石,不见其损日有所亏
    感冒了,好难受
  • 原文地址:https://www.cnblogs.com/zhangyuhao/p/10567253.html
Copyright © 2011-2022 走看看