建议36:使用FCL中的委托声明

本文介绍了FCL中Action、Func、Predicate等通用委托的使用方法,并对比了自定义委托的优劣。通过实例展示了如何利用这些委托简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议36:使用FCL中的委托声明

 FCL中存在3类这样的委托声明,它们分别是:Action、Func、Predicate。尤其是在它们的泛型版本出来以后,已经能够满足我们在实际编码过程中的大部分需求。

  • Action表示接受0个或多个输入参数,执行一段代码,没有任何返回值;
  • Func表示接受0个或多个输入参数,执行一段代码,带返回值;
  • Predicate表示定义一组条件并判读参数是否符合条件。

Action的重载版本有17个,最多参数的重载有16个参数。

Func的重载版本有17个,最多参数的重载有16个参数。

注意:很少方法的参数能够超过16个,如果真有这样的参数,首先要考虑自己设计是否存在问题。另外,我们也可以使用params关键字来减少参数的声明。如:

static void Method1(params int[] i)

表示该方法接受0个或多个整型参数。

 

复制代码
        delegate int AddHandler(int i, int j);
        delegate void PrintHandler(string msg);

        static void Main(string[] args)
        {
            AddHandler add = Add;
            PrintHandler print = Print;
            print(add(1, 2).ToString());
        }

        static int Add(int i, int j)
        {
            return i + j;
        }

        static void Print(string msg)
        {
            Console.WriteLine(msg);
        }
复制代码

 

委托声明AddHandler和PrintHandler完全可以被Func与Action取代。

复制代码
        static void Main(string[] args)
        {
            Func<int, int, int> add = Add;
            Action<string> print = Print;
            print(add(1, 2).ToString());
        }

        static int Add(int i, int j)
        {
            return i + j;
        }

        static void Print(string msg)
        {
            Console.WriteLine(msg);
        }
复制代码

 

 

我们应该习惯在代码中使用这类委托来代替自己的委托声明。

处理Action、Func和Predicate外,FCL中还有用于表示特殊含义的委托声明。如

用于表示注册事件方法的委托声明:

public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

 

表示线程方法的委托声明:

public delegate void ThreadStart();
public delegate void ParameterizedThreadStart(object obj);

 

 表示异步回调的委托声明:

public delegate void AsyncCallback(IAsyncResult ar);

 

在FCL中每一类委托声明都代表一类特殊的用途,虽然可以使用自己的委托声明来代替,但是这样做不仅没有必要,而且会让代码失去简洁性和标准性。在我们实现自己的委托声明前,应该首先查看MSDN,确信有必要后才这样做。

 

 

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值