VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之C#委托

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

什么是委托。

委托是一种数据类型。

委托的作用。

把变化的东西封装起来。

 

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

相关教程