C#Fun和Action内置泛型委托

1)Fun委托

委托添加多个事件(委托的多播或组播),委托包含返回值时,仅得到最后向委托添加的事件(方法)的返回值,所以在使用有返回值时必须注意这一点。

public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
//Func至少0个输入参数,至多16个输入参数,根据返回值泛型返回。必须有返回值,不可void。
//Func<int> 表示没有输入参参,返回值为int类型的委托。
//Func<object,string,int> 表示传入参数为object, string ,返回值为int类型的委托。
//Func<object,string,int> 表示传入参数为object, string, 返回值为int类型的委托。
//Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型),返回值为int类型的委托。
//返回值类型写在泛型类型的最后
            //有一个参数,一个返回值
            Func<int, int> fun4 = new Func<int, int>(FunWithPara);
            int result4 = fun4(4);
            Console.WriteLine($"这里是一个参数一个返回值的方法,返回值是:{result4}");
            Console.WriteLine("----------------------------");
            // 使用委托
            Func<int, string> fun5 = delegate (int i) { return i.ToString(); };
            string result5 = fun5(5);
            Console.WriteLine($"这里是一个参数一个返回值的委托,返回值是:{result5}");
            Console.WriteLine("----------------------------");
            // 使用匿名委托
            Func<int, string> fun6 = (int i) => 
            {
                return i.ToString();
            };
​
2)Action委托

含义:没有返回值,可以不包含参数

(1)声明委托、定位委托事件、向委托添加事件、执行委托

/// <summary>
/// 不包含参数
/// </summary>
private event Action Action_0;
/// <summary>
/// 包含一个参数
/// </summary>
private event Action<int> Action_1;
/// <summary>
/// 包含两个参数
/// </summary>
private event Action<int, double> Action_2;
/// <summary>
/// 包含三个参数
/// </summary>
private event Action<int, double, string> Action_3;
​
/// <summary>
/// 定义没有参数委托的事件
/// </summary>
private void Fun_0()
{
    Console.WriteLine("没有参数");
}
/// <summary>
/// 定义包含一个参数委托的事件
/// </summary>
private void Fun_1(int nInt)
{
    Console.WriteLine($"包含一个参数:{nInt}");
}
/// <summary>
/// 定义包含两个参数委托的事件
/// </summary>
private void Fun_2(int nInt, double dDouble)
{
    Console.WriteLine($"包含两个参数,参数值:{nInt},{dDouble}");
}
/// <summary>
/// 定义包含三个参数委托的事件
/// </summary>
private void Fun_3(int nInt, double dDouble, string str)
{
    Console.WriteLine($"包含三个参数,参数值:{nInt},{dDouble},{str}");
}
​
​
//点击事件
private void btn_Click(object sender, EventArgs e)
{
    //向委托添加事件
    Action_0 += Fun_0;
    Action_1 += Fun_1;
    Action_2 += Fun_2;
    Action_3 += Fun_3;
​
    //执行委托
    Action_0.Invoke();
    Action_1.Invoke(666);
    Action_2.Invoke(666,888.0);
    Action_3.Invoke(666,888,"Hello World");
}
​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值