用delegate 和event实现事件(有参和无参,有返回值和无返回值)

using System;
using System.Windows.Forms;

namespace 委托与事件
{
public partial class Form1 : Form
{
//1、声明委托
public delegate void ConnectDelegate1(); // 无参数,无返回值
public delegate void ConnectDelegate2(bool state); // 有参数,无返回值

    public delegate TResult Func<out TResult>();                // 无参数,有返回值TResult
    public delegate TResult Func<in T, out TResult>(T arg);     // 带参数T,有返回值TResult
    //2、声明委托事件
    public event ConnectDelegate1 Event1;             //  无参数,无返回值
    public event ConnectDelegate2 Event2;            //  有参数,无返回值

    public event Func<string> Event3;                // 无参数,有返回值
    public event Func<bool, string> Event4;          // 带参数,有返回值
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //3、订阅事件
        Event1 += Method1;
        Event2 += Method2;

        Event3 += Method3;
        Event4 += Method4;
    }
    //4、触发事件
    private void button1_Click(object sender, EventArgs e)//执行Click方法,触发事件
    {
        if (Event2 != null) //是否被订阅
            Event2(true); //发布事件
    }
    private void button2_Click(object sender, EventArgs e)
    {
        if (Event2 != null) //是否被订阅
            Event2(false); //发布事件

    }
    //5、执行的方法
    private void Method1()//无参数,无返回值
    {
        string str = string.Empty;
        str = "测试用";
    }
    private void Method2(bool make)//有参数,无返回值
    {
        if (make == true)
            label1.Text = "打开连接";
        else
            label1.Text = "断开连接";
    }

    private string Method3()//无参数,有返回值
    {
        string str = string.Empty;
        return str;
    }
    private string Method4(bool make)//有参数,有返回值
    {
        string str = string.Empty;
        if (make == true)
            label1.Text = "打开连接";
        else
            label1.Text = "断开连接";
        return str;
    }
}

}

posted on 2025-10-17 09:41  lyc6921  阅读(9)  评论(0)    收藏  举报

导航