C#:委托的用法和作用

166 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

C#

  • C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core之上的高级程序设计语言。
  • C#具有安全、稳定、简单、优雅等特点。在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如宏和多重继承)。
  • C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
  • C#在语法上大致与JAVA相同,都是面向对象。但是C#通过委托保留了C++中对指针的操作,而JAVA为了安全性完全去除了对指针的操作。
  • 本文主要介绍C#中委托的用法和作用。

委托

委托是一种类(class),即委托也是一种数据类型。
委托可以看作是对方法的抽象,如同类是对对象的抽象。

委托的声明

delegate int Func(int x, int y);

关键字:delegate
方法的抽象:

  • 第一个int:表示此类方法的返回值必须为int类型
  • Func:此委托的名称
  • (int x, int y):此类方法的参数列表
    约束:委托中的实例方法必须返回值相同,参数个数和类型相同

委托的实例化

  • 委托的实例化类似于类的实例化,使用new关键字。
  • 构造方法中需要传入的参数为与此委托定义相符合的方法的方法名(不可以带括号,否则是在调用此方法)。
# 定义Number类以及它的add方法
Class Number{
    public int add(int x, int y){
        return x + y;
    }
}

# 类Number的实例化
Number number = new Number();

# 委托Func的实例化
Func func = new Func(number.add);

使用委托间接调用方法

两种方式使用委托间接调用委托中的方法:

  • 实例化委托的名称.invoke(方法参数);
  • 实例化委托的名称.(方法参数);
int x = 10;
int y = 20;
res1 = func.invoke(x, y);
res2 = func(x, y);

-> res1 = 30
-> res2 = 30

委托的一般使用

委托的用法一般为将方法当作参数传递给另一个方法,使用场景一般为“模板方法”和“回调方法”两种。

模板方法

使用外部方法的结果作为当前方法逻辑中的一环:

  • 一般都一定会调用外部方法
  • 调用外部方法的位置常为代码中部
  • 外部方法有返回值

回调方法

根据当前方法的逻辑选择是否调用外部方法:

  • 外部方法可能被调用也可能不被调用
  • 调用外部方法的位置常为代码尾部
  • 外部方法无返回值