C#知识点-15(匿名函数、使用委托进行窗体传值、反射)

本文详细介绍了C#中的匿名函数、lambda表达式、不同类型的委托(如Action和Func)、窗体间传值、多播委托、反射的概念和操作,以及插件开发中的接口规范和实例。
摘要由CSDN通过智能技术生成

匿名函数

概念:没有名字的函数,一般情况下只调用一次。它的本质就是一个方法,虽然我们没有定义这个方法,但是编译器会把匿名函数编译成一个方法

    public delegate void Del1();//无参数无返回值的委托
    public delegate void Del2(string name);//有参数无返回值的委托
    public delegate string Del3(string s,int n);//有参数有返回值的委托
    internal class Program
    {
        static void Main(string[] args)
        {
            Del1 del1 = delegate ()
            {
                Console.WriteLine("无参数无返回值的匿名函数");
            };
            del1.Invoke();
            Console.ReadKey();
        }
    }

我们可以使用lambda表达式更简洁地定义一个匿名函数

            Del1 del1 = () => { Console.WriteLine("无参数无返回值的lambda表达式"); };
            del1.Invoke();//调用
            Console.ReadKey();

当lambda表达式中参数列表只有一个参数时,括号可以省略

            Del2 del2 = msg => { Console.WriteLine("hello" + msg); };
            del2.Invoke("world" + "有参数无返回值的lambda表达式");
            Console.ReadKey();

匿名函数定义的参数列表的参数类型,是不能省略的

            Del3 dle3 = (string s1, int n1) => { return "有参数有返回值的lambda表达式"; };
            string res = dle3.Invoke("1", 1);
            Console.WriteLine(res);

泛型委托

之前我们写的委托都是需要自己定义委托的参数和返回值,而.NET框架为我们封装了泛型委托框架,让我们不用再声明委托,可以直接使用。分别为Action委托,Func委托。

Action委托:
不带返回值的委托,可以有参数,也可以没有参数

            Action action = () => { Console.WriteLine("无参无返回值的委托"); };
            action();//直接调用
            action.Invoke();//间接调用

            Action<string,int> action2 = (a,b)=> { Console.WriteLine("姓名为{0}的人,年龄为{1}",a,b); };
            action2.Invoke("张三",18);
            Console.ReadKey();

Func委托:
带返回值的委托


            //如果Func尖括号里只有一个参数类型,就表示返回值就是这个类型
            Func<int> func = () => { return 100; };
            int a = func.Invoke();
            Console.WriteLine(a);

            //需要两个整数类型的参数,以及一个string类型的返回值
            Func<int, int, string> func2 = (c, d) => { Console.WriteLine(c); Console.WriteLine(d); return "hello world"; };
            string res = func2.Invoke(10, 20);
            Console.WriteLine(res);

使用委托进行窗体传值

1、先创建两个窗体对象,添加所需控件


2、当点击form1按钮时,将textbox里的值传递给form2
 

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

        private void button1_Click(object sender, EventArgs e)
        {
            //创建一个form2对象,通过form2的构造函数将窗体1的文本框的值传递给窗体2
            Form2 form2 = new Form2(textBox1.Text.Trim());
            //将窗体2展示出来
            form2.Show();
        }
    }
}
namespace 委托_窗体传值
{
    public partial class Form2 : Form
    {
        public Form2(string msg)//窗体2的构造函数,每回创建窗体2对象的时候都会执行构造函数初始化。通过参数接收窗体一传递过来的值
        {
            InitializeComponent();
            textBox1.Text = msg;//将接收到的值展示到窗体2的文本框上
        }

        p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值