• C# 委托


    委托学习要点:

    1.为什么要使用委托

    将一个方法作为参数传递给另一个方法.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 为什么使用委托
    {
    
        public delegate void DelProStr(string [] names);
        public delegate string DelProStr2(string name);
    
        class Program
        {
            static void Main(string[] args)
            {
                //三个需求
                //1.将一个字符串数组中每个元素都转换成大写
                //2.将一个字符串数组中每个元素都转换成小写
                //3.将一个字符串数组中每个元素两边都加上 双引号
    
                string[] names = { "abCDefG", "HIJKlmnOP", "QRsTuW", "XyZ" };
    
                //Test(names, ProStrToUpper);
    
                //ProStr(names, ToSYH);
    
                //匿名函数
                ProStr(names, delegate(string name) {
                    return name.ToLower();
                });
    
                for (int i = 0; i < names.Length; i++)
                {
                    Console.WriteLine(names[i]);
                }
                Console.ReadKey();
            }
    
            #region
            public static void ProStr(string [] names,DelProStr2 del2)
            {
                for(int i=0;i<names.Length;i++)
                {
                    names[i] = del2(names[i]);
                }
            }
    
            public static string ToUpper(string name)
            {
                return name.ToUpper();
            }
    
            public static string Tolower(string name)
            {
                return name.ToLower();
            }
    
            public static string ToSYH(string name)
            {
                return """+name+""";
            }
    
            #endregion
    
            public static void Test(string [] names,DelProStr del)
            {
                del(names);
            }
    
            //大写
            public static void ProStrToUpper(string[] names)
            {
                for (int i = 0; i < names.Length; i++)
                {
                    names[i] = names[i].ToUpper();
                }
            }
    
            //小写
            public static void ProStrToLower(string [] names)
            {
                for(int i=0;i<names.Length;i++)
                {
                    names[i] = names[i].ToLower();
                }
            }
    
            //双引号
            public static void ProStrSYH(string [] names)
            {
                for(int i=0;i<names.Length;i++)
                {
                    names[i] = """ + names[i] + """;
                }
            }
    
    
        }
    }

    2.委托的概念

    声明一个委托类型

    委托所指向的函数必须跟委托具有相同的签名(参数和返回值)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _08委托概念
    {
        //声明一个委托指向一个函数
        public delegate void DelSayHi(string name);
    
        class Program
        {
            static void Main(string[] args)
            {
                //DelSayHi del = new DelSayHi(SayChinese);
                DelSayHi del = SayChinese;
                //Test("张三",);
                Test("张三", SayChinese);
                Test("alexx", SayEnglish);
    
    
                Console.ReadKey();
            }
    
            public static void Test(string name,DelSayHi del)
            {
                //调用
                del(name);
            }
    
            public static void SayChinese(string name)
            {
                Console.WriteLine("吃了么?"+name);
            }
    
            public static void SayEnglish(string name)
            {
                Console.WriteLine("Nice to meet you"+name);
            }
    
        }
    }

    3.匿名函数

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _09匿名函数
    {
        public delegate void DelSay(string name);
        class Program
        {
            static void Main(string[] args)
            {
                //匿名函数
                DelSay del = delegate(string name) {
                    Console.WriteLine("Hello"+name);
                };
                del("alexx");
                
    
                //lamda表达式 => goes to
                DelSay del = (string name) => { Console.WriteLine("HI "+name); };
                del("alexx");
    
                Console.ReadKey();
            }
    
            //public static void 
        }
    }

    4.练习:使用委托求数组的最大值

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _10求数组的最大值
    {
        public delegate int DelCompare(object o1,object o2);
        class Program
        {
            static void Main(string[] args)
            {
                object [] o ={"1","2","3","4","56"};
                //DelCompare del = Compare;
                //object resule = GetMax(o, Compare2);
                object result = GetMax(o, delegate(object o1, object o2)
                {
                    string s1 = (string)o1;
                    string s2 = (string)o2;
                    return s1.Length - s2.Length;
                });
    
                Console.WriteLine(result);
                Console.ReadKey();
    
            }
    
            public static object GetMax(object [] nums,DelCompare del)
            {
                object max = nums[0];
                for(int i=0;i<nums.Length;i++)
                {
                    if(del(max,nums[i]) < 0)
                    {
                        max =nums[i];
                    }
                }
                return max;
    
            }
    
            public static int Compare(object o1,object o2)
            {
                int n1 = (int)o1;
                int n2 = (int)o2;
                return n1 - n2;
            }
    
            public static int  Compare2(object o1,object o2)
            {
                string s1 = (string)o1;
                string s2 = (string)o2;
                return s1.Length - s2.Length;
            }
    
            //int数组
            public static int GetMax(int [] nums)
            {
                int max = nums[0];
                for(int i=0;i<nums.Length;i++)
                {
                    if (max < nums[i])
                        max = nums[i];
                }
                return max;
            }
    
            //string数组
            public static string GetMax(string [] names)
            {
                string max = names[0];
                for(int i=0;i<names.Length;i++)
                {
                    if (max.Length < names[i].Length)
                        max = names[i];
                }
                return max;
            }
    
        }
    }

    5.练习:使用委托求任意数组的最大值 =>泛型委托

    6.泛型委托

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _11泛型委托
    {
        public delegate int DelCompare<T>(T o1, T o2);
        class Program
        {
            static void Main(string[] args)
            {
                int [] nums = {1,2,3,4,5,123 };
                int max = GetMax<int>(nums, delegate(int o1, int o2) {
                    return o1 - o2;
                });
                Console.WriteLine(max);
                Console.ReadKey();
    
            }
    
            public static T GetMax<T>(T[] nums, DelCompare<T> del)
            {
                T max = nums[0];
                for (int i = 0; i < nums.Length; i++)
                {
                    if (del(max, nums[i]) < 0)
                    {
                        max = nums[i];
                    }
                }
                return max;
    
            }
        }
    }

    7.多播委托

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 多播委托
    {
        public delegate void DelTest(string str);
        class Program
        {
            static void Main(string[] args)
            {
                //
                DelTest del = t1;
                del += t2;
                del += t3;
                del("aa");
    
                Console.WriteLine(del);
    
                Console.ReadLine();
            }
    
            private static void t1(string name)
            {
                Console.WriteLine("t1"+name);
            }
    
            private static void t2(string name)
            {
                Console.WriteLine("t2"+name);
            }
    
            private static void t3(string name)
            {
                Console.WriteLine("t3"+name);
            }
    
        }
    }

    8.lamda表达式

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _12lamda表达式
    {
        public delegate void Delone();
        public delegate void Deltwo(string name);
        public delegate string Delthree(string name);
        class Program
        {
            static void Main(string[] args)
            {
                Delone one = delegate() { };
                Delone two = () => { };
    
                Deltwo a = delegate(string name) { };
                Deltwo b = (string name) => { };
    
                Delthree ac = delegate(string name) { return name; };
                Delthree ab =(string name)=>{return name;};
    
                List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
                list.RemoveAll(n => n >= 8);//lamda表达式
                foreach(var item in list)
                {
                    Console.WriteLine(item);
                }
    
                Console.ReadKey();
    
            }
    
    
        }
    }

    9.使用委托来实现窗体传值.

    (父窗体与子窗体来回传值)

    FORM1:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.dellaber = laberShow;
                frm2.Show();
                //this.Hide();
            }
    
            private void laberShow(string str)
            {
                this.label1.Text = str;
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.Textbox1 = this.label1.Text + "ZQ!";
                frm2.Show();
            }
        }
    }

    FORM2:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public delegate void DelShowForm1Laber(string str);
        public partial class Form2 : Form
        {
            public DelShowForm1Laber dellaber;
            public Form2()
            {
                InitializeComponent();
            }
            private string _textbox1;
    
            public string Textbox1
            {
                get { return _textbox1; }
                set { _textbox1 = value;
                this.label1.Text = _textbox1;
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.textBox1.Text = this.textBox1.Text.Trim();
                //fuzhi
             
                //Form1 frm1 = new Form1();
                //frm1.Show();
                dellaber(this.textBox1.Text);
    
                this.Hide();
            }
    
            private void form2_laber(string str)
            {
                this.label1.Text = str;
            }
        }
    }
  • 相关阅读:
    ios开发之--把秒转换为天时分秒
    网络爬虫的类型
    网络爬虫的组成
    为什么要学网络爬虫
    什么是网络爬虫
    Windows 下安装 Python3
    Linux 下安装 Python3
    HTTP 代理
    HTTP Cookies
    爬虫的基本原理
  • 原文地址:https://www.cnblogs.com/youguess/p/8120067.html
Copyright © 2020-2023  润新知