zoukankan      html  css  js  c++  java
  • 编写高质量代码改善C#程序的157个建议——建议36:使用FCL中的委托声明

    建议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个建议》陆敏技

  • 相关阅读:
    Ubuntu 15.04 开机无法进入图形界面,自动进入emergency mode解决方法
    Docker常用命令
    安装mongodb时报错 configure: error: Cannot find OpenSSL's libraries
    Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
    mysql varchar类型转换int类型
    elasticsearch 安装 head插件
    解决linux下root运行Elasticsearch异常
    PHP 数组中出现中文乱码,json_encode返回结果为null 或false
    Git命令_git remote与远程仓库管理
    Git命令_git clone和git fork的区别以及pull request含义
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4732627.html
Copyright © 2011-2022 走看看