栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

c# 四种委托的区别【delegate 、action、func和predicate 】

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c# 四种委托的区别【delegate 、action、func和predicate 】

c# 四种委托的区别【delegate 、action、func和predicate 】
      • 什么是委托?
      • c#四种委托的异同?
      • 如何简单使用这四种委托?

什么是委托?

委托是一种动态调用方法的类型,属于引用型。
委托是对方法的抽象和封装。委托对象实质上代表了方法的引用(即内存地址)

特点:

  1. 委托类似于C++函数指针,但与指针不同的是,委托是完全面向对象的,是安全的数据类型。
  2. 委托允许将方法作为参数进行传递。
  3. 委托可用于定义回调方法。
  4. 委托可以把多个方法链接在一起。这样,在事件触发时可同时启动多个事件处理程序。
  5. 委托签名不需要与方法精确匹配。
c#四种委托的异同?
  1. delegate ,至少0个参数,至多32个参数,可以无返回值,可以指定返回值类型
  2. Action ,至少0个参数,无返回值的泛型委托
  3. Func ,至少0个参数,至多16个参数,必须有返回值的泛型委托
  4. Predicate ,有且只有一个参数,返回值只为 bool 类型
如何简单使用这四种委托?
  1. delegate
 // 定义类型
 public delegate int MethodDelegate(int x, int y);
 // 指向函数
 private static MethodDelegate method = new MethodDelegate(Add);
 // 被指向的函数
 private static int Add(int x, int y)
 {
     return x + y;
 }
 // 执行
 private void Do()
 {
     Console.WriteLine(method(1,2));
 }
  1. action
 // 定义委托函数
 public static void Action(string s)
 {
     Console.WriteLine(s);
 }
 // 将函数作为参数传递
 public static void Test(Action action, T p)
 {
     action(p);
 }
 // 测试
 private void Do()
 {
     Test(Action, "Hello World");
 }
  1. func
// 委托函数
private static int Fun(int a, int b)
{
    return a + b;
}
// 将函数作为参数
public static int Test(Func func, T1 a, T2 b)
{
    return func(a, b);
}
// 测试
private void Do()
{
    int result = Test(Fun, 100, 200);
    Console.WriteLine("结果:" + result);
}
  1. predicate
 // 测试函数
 private void Do()
 {
     Point[] points = {
         new Point(100,100),
         new Point(100,100),
         new Point(100,200),
         new Point(100,100),
         new Point(100,100)
     };
     Point first = Array.Find(points, PredicateFunc);
 }
 // 执行方法
 private bool PredicateFunc(Point obj)
 {
     if (obj.X > obj.Y)
     {
         return true;
     }
     else
     {
         return false;
     }
 }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号