看到他我一下子就悟了---委托

简介: 看到大家的留言,我想说下我对委托的了解,首先看它的定义: 委托 就是将方法作为方法的参数 不用先看例子什么的,你就多品味品味这句话,然后你看下使用委托的步骤, 1.定义一个委托 2.注册该委托 3.

看到大家的留言,我想说下我对委托的了解,首先看它的定义:

委托 就是将方法作为方法的参数

不用先看例子什么的,你就多品味品味这句话,然后你看下使用委托的步骤,

1.定义一个委托

2.注册该委托

3.使用委托

Ok就这么简单,其实委托就像大家常说的那样:

它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在

其实不用怕,你就按着这三步来标准没错,下面来个小例子:

第一步:定义委托

public delegate void GreetingDelegate(string name); 

第二步:注册委托

这里先定义一个方法

private static void ChineseGreeting(string name) 

  { 

  Console.WriteLine("早上好, " + name); 

  } 

然后注册

GreetingDelegate delegate1+ =ChineseGreeting;

第三步:使用委托

delegate1("houhou");

OK,委托完成,其实不要怕,委托真的很简单……

下面介绍几个已定义好的委托

1.Action     Action是无返回值的泛型委托。

 static void Main(string[] args)
        {
            Test<string>(Action,"Hello World!");
            Test<int>(Action, 1000);
            Test<string>(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表达式定义委托
            Console.ReadKey();
        }
        public static void Test<T>(Action<T> action, T p)
        {
            action(p);
        }
        private static void Action(string s)
        {
            Console.WriteLine(s);
        }
        private static void Action(int s)
        {
            Console.WriteLine(s);
        }

    可以使用 Action<T1, T2, T3, T4> 委托以参数形式传递方法,而不用显式声明自定义的委托。 封装的方法必须与此委托定义的方法签名相对应。 也就是说,封装的方法必须具有四个均通过值传递给它的参数,并且不能返回值。 (在 C# 中,该方法必须返回 void)通常,这种方法用于执行某个操作。

2.Func的使用

  static void Main(string[] args)
        {
            Console.WriteLine(Test<int,int>(Fun,100,200));
            Console.ReadKey();
        }
        public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b)
        {
            return func(a, b);
        }
        private static int Fun(int a, int b)
        {
            return a + b;
        }

Func是有返回值的泛型委托

3.predicate 是返回bool型的泛型委托泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。

     static void Main(string[] args)
        {
            Point[] points = { new Point(100, 200), 
            new Point(150, 250), new Point(250, 375), 
            new Point(275, 395), new Point(295, 450) };
            Point first = Array.Find(points, ProductGT10);
            Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
            Console.ReadKey();
        }
        private static bool ProductGT10(Point p)
        {
            if (p.X * p.Y > 100000)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

 使用带有 Array.Find 方法的 Predicate 委托搜索 Point 结构的数组。如果 X 和 Y 字段的乘积大于 100,000,此委托表示的方法 ProductGT10 将返回 true。Find 方法为数组的每个元素调用此委托,在符合测试条件的第一个点处停止。

目录
相关文章
|
7月前
|
安全 PHP
PHP 8的Match表达式:更强大的条件控制
PHP 8的Match表达式:更强大的条件控制
|
编解码 API 数据安全/隐私保护
自学HarmonyOS Next记录:实现相册访问功能
最近我决定开发一个鸿蒙App,旨在提供更好的照片管理体验。通过使用PhotoAccessHelper API,我实现了访问、显示和管理设备相册中的照片。过程中遇到了权限不足的问题,通过在config.json中添加权限声明并编写权限检查代码得以解决。此外,我还实现了分页加载和展示照片详细信息等功能,提升了用户体验。这次开发不仅让我掌握了API的使用,也深刻体会到鸿蒙系统对用户隐私和数据安全的重视。 总结这次开发,我不仅学到了技术知识,还明白了开发者保护用户数据安全的责任。未来将继续探索更多功能,欢迎关注和收藏!
1038 70
自学HarmonyOS Next记录:实现相册访问功能
|
10月前
|
存储 消息中间件 Kafka
官宣 | Fluss 0.6 发布公告
Fluss社区宣布0.6.0版本正式发布,历经3个多月开发,45位贡献者完成200+代码提交。新版本亮点包括:列压缩技术降低6倍存储空间、MergeEngine支持灵活主键合并策略、Prefix Lookup实现Delta Join功能。这些特性增强了Fluss的功能和性能,标志着其在构建下一代分析型流存储系统上的重要进展。
461 1
官宣 | Fluss 0.6 发布公告
|
IDE Java 开发工具
python缩进错误(IndentationError)
【7月更文挑战第12天】
2760 10
|
机器学习/深度学习 人工智能 数据可视化
Jupyter Notebook的10个常用扩展介绍
Jupyter Notebook(前身为IPython Notebook)是一种开源的交互式计算和数据可视化的工具,广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面,允许用户创建和共享文档,这些文档包含实时代码、方程、可视化和文本。
448 6
|
Java 关系型数据库 MySQL
Spring Boot中集成MySQL数据库的步骤和技巧
Spring Boot中集成MySQL数据库的步骤和技巧
|
消息中间件 Java API
Nacos配置中心之动态感知
Nacos配置中心之动态感知
1078 0
|
弹性计算 物联网 Serverless
如何获得ICP备案服务码?
如何获得ICP备案服务码?
|
数据库
Springboot+mybatis-plus逆向工程生成代码器
Springboot+mybatis-plus逆向工程生成代码器
|
Arthas Java 测试技术
实战总结,记一次glibc导致的堆外内存泄露
本文记录一次glibc导致的堆外内存泄露的排查过程。