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

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

程序员文章站 2022-07-02 23:03:23
委托 1、 什么是委托? 委托就是具有相同签名和返回值类型的有序方法列表 它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递 如图: 2、 委托的声明 先来看看委托是如何声明的 a、委托类型的声明看上去与方法的声明很类似,有返回类型和签名。返回类型和签名指定了委托接受的方法的形式 b、 ......

委托

1、 什么是委托?

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

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

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

如图:

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

2、 委托的声明

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

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

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

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

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

        ▲ 委托没有方法主体

3、 委托的应用

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

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

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

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

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”的名称变为”骚年,我已经变色了“

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

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

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

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

如代码中所写:

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

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

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