欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#委托。

程序员文章站 2022-06-28 20:52:16
什么是委托。 委托是一种数据类型。 委托的作用。 把变化的东西封装起来。 委托是引用变量,声明后不赋值为null 所以使用前校验非空。 目前来看,委托没啥毛用,直接调用M1不就得了? 下面程序的作用是,传入一个字符串,把每个人名都加上* 但是现在需求变了,把每个人名都换成大写。 就需要改变代码。 而 ......

什么是委托。

委托是一种数据类型。

委托的作用。

把变化的东西封装起来。

 

委托是引用变量,声明后不赋值为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);