栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C#委托知识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#委托知识

委托:将一个方法作为参数 传递给另一个方法。

写法一:无返回值的委托

using System;

namespace 委托
{
    //声明一个委托
    public delegate void Delegate_Str(string[] array);

    class Program
    {
        static void Main(string[] args)
        {
            
            string[] array_Str = { "abCDefG", "hiJKlmN", "OPqrSt", "UvWxYz" };
            //一般的方法调用
            //StrToUpper(array_Str);
            //StrToLower(array_Str);
            //StrSYH(array_Str);
            //委托调用
            //Test_Delegate(array_Str,StrToUpper);
            //Test_Delegate(array_Str, StrToLower);
            Test_Delegate(array_Str, StrSYH);
            for(int i=0;i

写法二:有返回值的委托

using System;

namespace 委托
{
    //声明一个委托
    public delegate string Delegate_Str(string str);

    class Program
    {
        static void Main(string[] args)
        {
            string[] array_Str = { "abCDefG", "hiJKlmN", "OPqrSt", "UvWxYz" };
            //Str(array_Str, StrToUpper);
            //Str(array_Str, StrToLower);
            Str(array_Str, StrSYH);
            for(int i=0;i

写法三:匿名函数

using System;

namespace 委托
{
    //声明一个委托
    public delegate string Delegate_Str(string str);

    class Program
    {
        static void Main(string[] args)
        {
            string[] array_Str = { "abCDefG", "hiJKlmN", "OPqrSt", "UvWxYz" };
            //匿名函数写法
            //Str(array_Str, delegate (string str)
            // {
            //     return str.ToUpper();
            // });
            //Str(array_Str, delegate (string str)
            //{
            //    return str.ToLower();
            //});
            Str(array_Str, delegate (string str)
            {
                return """ + str + """;
            });
            for (int i=0;i

示例一:使用委托求数组的最大值

using System;

namespace 求数组的最大值
{
    //使用委托求数组的最大值
    public delegate int DelCompare(object o1, object o2);

    class Program
    {
        static void Main(string[] args)
        {
            object[] o ={ "abc","fdsfdsds","fdalfdalfdalfdfda","fdafdas"};
            //写法1:匿名方法
            //object result = GetMax(o, delegate (object o1, object o2)
            //   {
            //       string s1 = (string)o1;
            //       string s2 = (string)o2;
            //       return s1.Length - s2.Length;
            //   });

            //写法2:Lambda表达式
            object result = GetMax(o, (object o1, object o2) =>
               {
                   string s1 = (string)o1;
                   string s2 = (string)o2;
                   return s1.Length - s2.Length;
               });
            Console.WriteLine(result);
        }

        public static object GetMax(object[] nums,DelCompare del)
        {
            object max = nums[0];
            for(int i=0;i 

泛型委托:

using System;

namespace 泛型委托
{
    public delegate int DelCompare(T t1, T t2);

    class Program
    {
        static void Main(string[] args)
        {
            //int[] nums = { 1, 2, 3, 4, 5 };
            //int max = GetMax(nums, Compare);
            //Console.WriteLine(max);

            string[] names = { "abcd", "abcdefg", "abc", "zwyz" };
            string max = GetMax(names, (string s1, string s2) =>
             {
                 return s1.Length - s2.Length;
             });
            Console.WriteLine(max);
        }

        public static T GetMax(T[] nums,DelCompare del)
        {
            T 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(int n1,int n2)
        {
            return n1 - n2;
        }
    }
}

Lambda表达式:

using System;
using System.Collections.Generic;

namespace Lambda表达式
{
    public delegate void DelOne();//无参无返回值
    public delegate void DelTwo(string name);//有参无返回值
    public delegate string DelThree(string name);//有参有返回值

    class Program
    {
        static void Main(string[] args)
        {
            DelOne del1 = () => { };//delegate() { };
            DelTwo del2 = (string name) => { };//delegate(string name) { }
            DelThree del3 = (string name)=> { return name; };//delegate(string name) { return name; };

            List list = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            list.RemoveAll(n => n > 4);
            foreach(var item in list)
            {
                Console.WriteLine(item);
            }
        }
    }
}

窗体传值:

using System;
using System.Windows.Forms;

namespace 窗体传值
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2(ShowMsg);
            frm2.Show();
        }

        void ShowMsg(string str)
        {
            label1.Text = str;
        }
    }
}

using System;
using System.Windows.Forms;

namespace 窗体传值
{
    //声明一个委托
    public delegate void DelTest(string str);

    public partial class Form2 : Form
    {
        public DelTest _del;

        public Form2(DelTest del)
        {
            this._del = del;
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _del(textBox1.Text);
        }
    }
}

运行结果为:

 多播委托:

using System;

namespace 多播委托
{
    public delegate void DelTest();

    class Program
    {
        static void Main(string[] args)
        {
            DelTest del = T1;
            del += T2;
            del += T3;
            del += T4;
            del -= T3;
            del();
        }

        public static void T1()
        {
            Console.WriteLine("我是T1");
        }

        public static void T2()
        {
            Console.WriteLine("我是T2");
        }

        public static void T3()
        {
            Console.WriteLine("我是T3");
        }

        public static void T4()
        {
            Console.WriteLine("我是T4");
        }
    }
}

运行结果为:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号