• C#简单委托示例——让你一看就会的demo


    委托

    1、 什么是委托?

    委托就是具有相同签名和返回值类型的有序方法列表

    它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递

    1. 是一种引用类型
    2. 方法的列表称为调用列表
    3. 当委托被调用时,它调用列表中的每个方法

    如图:

    2、 委托的声明

    先来看看委托是如何声明的

         a、委托类型的声明看上去与方法的声明很类似,有返回类型和签名。返回类型和签名指定了委托接受的方法的形式

         b、委托类型与方法声明的不同之处:

            ▲ 委托是以关键字delegate开头的

            ▲ 委托没有方法主体

    3、 委托的应用

    给大家写个简单易懂的实例,看完就知道委托时怎么一回事了

    先创建两个窗体Form1和Form2,点击Form1中的按钮弹出Form2,可以在Form2中点击按钮改变Form1的背景色

    接下来,我们来看看里面的具体代码,看看用委托是如何实现的

    Form1里面的代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace delegateWindowsForms
    {
        //首先声明一个无返回值、无参数的委托
        public delegate void MyDel();
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            //打开第二个窗口
            private void button1_Click(object sender, EventArgs e)
            {
                MyDel del = new MyDel(ChangeColor);  //实例化一个委托,把改变颜色的方法放到容器里面
                del += ChangeButtonText;//再向容器里添加改变按钮标题的方法
                Form2 frm2 = new Form2(del); //把委托挡着参数,传给frm2。这样frm2就可以调用了
                frm2.ShowDialog();
            }
    
            //改变第二个窗口背景颜色为红色
            public void ChangeColor()
            {
                this.BackColor = Color.Red;
            }
    
            //改变“改变第一个Form”的名称为”骚年,我已经变色了“
            public void ChangeButtonText()
            {
                this.button1.Text = "骚年,我已经变色了";
            }
        }
    }

    Form2里面的代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace delegateWindowsForms
    {
        public partial class Form2 : Form
        {
            MyDel delChange;
            public Form2(MyDel del)
            {
                InitializeComponent();
                this.delChange = del;
            }
    
            //颜色改变按钮的点击事件
            private void button1_Click(object sender, EventArgs e)
            {
                delChange();  //委托调用
            }
        }
    }

    运行代码,点击Form1中的按钮,弹出Form2,

    在Form2中点击改变Form1颜色按钮,可以发现,Form1的背景色瞬间变为红色,并且“改变第一个Form”的名称变为”骚年,我已经变色了“

     

    这样我们就跨窗体操作了控件。

    仔细观察以下两句代码我们可以知道,如何向委托这个容器添加方法。

    当实例化委托后,我们可以用“+=”向委托里面继续添加方法;

    如代码中所写:

    MyDel del = new MyDel(ChangeColor); //实例化一个委托,把改变颜色的方法放到容器里面
    del += ChangeButtonText;//再向容器里添加改变按钮标题的方法

    小结:委托是面向对象的,它定义方法签名的类型,可以与具有兼容签名的任何方法关联。

    我们可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。

    欢迎关注订阅我的微信公众平台【熊泽有话说】,更多好玩易学知识等你来取
    作者:熊泽-学习中的苦与乐
    公众号:熊泽有话说
    出处:https://www.cnblogs.com/xiongze520/p/10238530.html
    创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。  

     

  • 相关阅读:
    maven继承父工程统一版本号
    shiro权限控制参考
    动态查询列表页面的分页
    SVN服务器更改ip地址后怎么办
    cookie记住密码功能
    分享小插件的问题
    阿里云短信验证
    从svn上更新maven项目时,所有文件变成包的形式
    Maven工具
    Mybatis的dao层传递单参出现的问题
  • 原文地址:https://www.cnblogs.com/xiongze520/p/10238530.html
Copyright © 2020-2023  润新知