C#学习:委托

c# 委托 关键字:Delegate 学习笔记 生活中是不是经常需要拜托别人帮忙做一件事情? 比如:工作中,客户反馈系统有一个bug,但是你手头上还有很多工作没做完,就需要拜托有时间的同事帮忙解决一下 这就是委托了 定义委托(就是我现在有一个改bug的工作要处理)——声明一个和委托类型一模一样的方法(拜托同事帮忙改bug)—— 执行委托(同事接受我的委托,开始处理bug)注意:委托类型和方法类型必须是一样的,因为要处理同样类型的事情,否... 阅读详情
  • 委托声明和实例化

     (1)通过与委托签名相同的方法的方法名声明实例化委托

        //声明委托
        public delegate void Del(string message);

        //与委托签名相同的方法
        //签名相同即参数列表相同,返回值类型相同
        public static void DelegateMethod(string message)
        {
            Console.WriteLine(message);
        }

        //通过与委托签名相同的方法实例化委托
        Del handler = DelegateMethod;

        //调用委托
        handler("hello world");

     (2)通过匿名方法声明实例化委托

            public delegate void Del(string message);
            Del del=delegate(string name){
                Console.WriteLine("Hello:" + name);
            };
            del("delegate");

     (3)通过 Lambda 表达式声明和实例化委托

            public delegate void Del(string message);
            Del del = name =>{Console.WriteLine("Hello:{0}",
                    name);};
            del("delegate");
  •  委托使用

    (1)调用委托。调用方传递给委托的参数被传递给方法,方法如果有返回值由委托返回给调用方。

    class Program
    {
        public delegate int Add(int a, int b);

        public static int AddMethod(int a, int b)
        {
            int c = a + b;
            Console.WriteLine("{0}+{1}={2}", a, b, c);
            return c;
        }
        static void Main(string[] args)
        {
            Add add = AddMethod;
            int c = AddMethod(1, 1);
            Console.WriteLine("result:{0}", c);

            Console.Read();
        }
    }
输出:1+1=2
result:2

   (2)异步回调委托。委托实例作为方法的参数使用,在该方法内使用委托无须关注委托对应方法的具体实现,该功能类似接口。

    class Program
    {
        public delegate int Add(int a, int b);

        public static int AddMethod(int a, int b)
        {
            int c = a + b;
            Console.WriteLine("{0}+{1}={2}", a, b, c);
            return c;
        }
        static void Main(string[] args)
        {
            Add add = AddMethod;
            int d = AddWithCallBack(1, 1, add);
            Console.WriteLine("result:{0}", d);

            Console.Read();
        }
        public static int AddWithCallBack(int a, int b, Add callback)
        {
            int c = callback(a, b);
            return c;
        }
    }
输出:1+1=2
result:2

   (3)多路广播委托。调用委托时,可以调用多个方法,如果向委托方法列表中添加方法,可以通过加法运算符或加法赋值运算符(“+”或“+=”)添加委托实例。也可以通过减法运算符或减法赋值运算符(“-”或“-=”)移除方法。在多路广播委托中,委托将按顺序调用方法,方法引起的更改对下一个方法是可见的,在一个方法内发生异常,将不再调用后边的方法。

    class Program
    {
        public delegate void Del(string message);

        public static void DelegateMethod(string message)
        {
            Console.WriteLine(message);
        }

        static void Main(string[] args)
        {
            MethodClass obj = new MethodClass();
            Del del1 = obj.Method1;
            Del del2 = obj.Method2;
            Del del3 = DelegateMethod;
            Del allMethodsDelegate = del1 + del2;
            allMethodsDelegate += del3;
            allMethodsDelegate("Delegate Test1");

            allMethodsDelegate -= del1;
            allMethodsDelegate("Delegate Test2");

            Console.Read();
        }
     }
    public class MethodClass
    {
        public void Method1(string message) 
        {
            Console.WriteLine("Method1:" + message);
        }
        public void Method2(string message)
        {
            Console.WriteLine("Method2:" + message);
        }
    }
输出:Method1:Delegate Test1
Method2:Delegate Test1
Delegate Test1
Method2:Delegate Test2
Delegate Test2
  •  MSDN委托使用实例
// A set of classes for handling a bookstore:
namespace Bookstore
{
    using System.Collections;

    // Describes a book in the book list:
    public struct Book
    {
        public string Title;        // Title of the book.
        public string Author;       // Author of the book.
        public decimal Price;       // Price of the book.
        public bool Paperback;      // Is it paperback?

        public Book(string title, string author, decimal price, bool paperBack)
        {
            Title = title;
            Author = author;
            Price = price;
            Paperback = paperBack;
        }
    }

    // Declare a delegate type for processing a book:
    public delegate void ProcessBookDelegate(Book book);

    // Maintains a book database.
    public class BookDB
    {
        // List of all books in the database:
        ArrayList list = new ArrayList();

        // Add a book to the database:
        public void AddBook(string title, string author, decimal price, bool paperBack)
        {
            list.Add(new Book(title, author, price, paperBack));
        }

        // Call a passed-in delegate on each paperback book to process it: 
        public void ProcessPaperbackBooks(ProcessBookDelegate processBook)
        {
            foreach (Book b in list)
            {
                if (b.Paperback)
                    // Calling the delegate:
                    processBook(b);
            }
        }
    }
}


// Using the Bookstore classes:
namespace BookTestClient
{
    using Bookstore;

    // Class to total and average prices of books:
    class PriceTotaller
    {
        int countBooks = 0;
        decimal priceBooks = 0.0m;

        internal void AddBookToTotal(Book book)
        {
            countBooks += 1;
            priceBooks += book.Price;
        }

        internal decimal AveragePrice()
        {
            return priceBooks / countBooks;
        }
    }

    // Class to test the book database:
    class TestBookDB
    {
        // Print the title of the book.
        static void PrintTitle(Book b)
        {
            System.Console.WriteLine("   {0}", b.Title);
        }

        // Execution starts here.
        static void Main()
        {
            BookDB bookDB = new BookDB();

            // Initialize the database with some books:
            AddBooks(bookDB);

            // Print all the titles of paperbacks:
            System.Console.WriteLine("Paperback Book Titles:");

            // Create a new delegate object associated with the static 
            // method Test.PrintTitle:
            bookDB.ProcessPaperbackBooks(PrintTitle);

            // Get the average price of a paperback by using
            // a PriceTotaller object:
            PriceTotaller totaller = new PriceTotaller();

            // Create a new delegate object associated with the nonstatic 
            // method AddBookToTotal on the object totaller:
            bookDB.ProcessPaperbackBooks(totaller.AddBookToTotal);

            System.Console.WriteLine("Average Paperback Book Price: ${0:#.##}",
                    totaller.AveragePrice());
        }

        // Initialize the book database with some test books:
        static void AddBooks(BookDB bookDB)
        {
            bookDB.AddBook("The C Programming Language", "Brian W. Kernighan and Dennis M. Ritchie", 19.95m, true);
            bookDB.AddBook("The Unicode Standard 2.0", "The Unicode Consortium", 39.95m, true);
            bookDB.AddBook("The MS-DOS Encyclopedia", "Ray Duncan", 129.95m, false);
            bookDB.AddBook("Dogbert's Clues for the Clueless", "Scott Adams", 12.00m, true);
        }
    }
}
/* Output:
Paperback Book Titles:
   The C Programming Language
   The Unicode Standard 2.0
   Dogbert's Clues for the Clueless
Average Paperback Book Price: $23.97
*/

 

 

 

【AI黑话日日新】什么是AI云原生? 云原生赋能AI:利用容器、微服务、Serverless、DevOps等云原生技术,解决AI应用(尤其是大模型)在部署、扩展、运维、成本控制方面的痛点,让AI服务具备高可用、高性能、易运维、易扩展的特性AI赋能云原生:将AI技术(如智能调度、异常检测、自动优化)融入云基础设施管理,使云平台具备自我感知、自我优化、自我修复的能力,从"被动响应"升级为"主动适配"其本质是实现从""(AI运行在云上)到""(为AI量身打造的云)的根本性转变。 阅读详情

相关推荐

自组织映射神经网络(SOM)

目录 1 背景:自组织(竞争型)神经网络 2竞争学习的概念与原理 2.1 竞争学习的步骤 2.2 示例 3SOM典型结构 4SOM网的权值调整域 5 SOM Kohonen 学习算法 6 SOM示例 7SOM设计细节 7.1输出层设计 7.2输出层节点排列的设计 7.3 权值初始化问题 7.4学习率的设计 7.5设计拓扑领域 8SOM功能分析 8.1 保序映射 8.2数据压缩 8.3 特征提取 9自组织映射神经网络与K均值算法的区别...

weixin_39910711的博客 1万+

C#学习八:委托

目录什么是委托委托的声明(自定义委托)委托的一般使用 什么是委托 委托(delegate)是函数指针的“升级版” 实例:C/C++中的函数指针 一切皆地址 变量(数据)是以某个地址为起点的一段内存中所储存的值 函数(算法)是以某个地址为起点的一段内存中所储存的一组机器语言指令 直接调用与间接调用 直接调用:通过函数名来调用函数,CPU通过函数名直接获得函数所在地址并开始执行—返回 间接调用:通过...

qq_43042445的博客 234

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

C#学习笔记8:接口、委托、事件

今日继续我的C#学习之路,今日学习接口、委托、事件 文章从实践出发学习这三个设计理念,并提供完整源码

NULL指向我的博客 1992

SPSS回归分析(线性:一元(简单)和多重;非线性logistic)

SPSS线性回归分析回归分析一、线性模型(针对连续因变量,线性关系)(一)简单线性回归(一元线性回归)1、绘制散点图2、建立简单(一元)线性回归模型3、建立模型后,检查预测结果(二)多重回归分析1、绘制矩阵分布散点图(论文专用你懂的)2、建立多重回归模型point 1:自变量加入方法:逐步(步进)法3、建立模型后,检查预测结果二、非线性模型(将非线性问题转换为线性问题)1、logistic分析的回归模型1.1 建立回归模型1.2 利用回归模型进行预测 根据之前的学习,通过评价实验得到了主观数据, 通过 描述

weixin_44394352的博客 5万+

从零开始用TS开发babylonjs - 本机环境搭建

babylonjs,初始化本地安装,web3d引擎

han3527638的专栏 797

C#学习笔记之一:委托

首先明确一点:委托的签名指的是函数的返回类型和参数类型。 1.委托是什么?能干什么? 委托(类型)是一种引用型数据类型,可以引用的对象是一个至多个方法。 (1)委托相当于C/C++中的函数指针,但委托类型更加安全。 (2)委托允许将方法作为参数传递。 (3)委托还可以将代码块作为参数传递(匿名方法实现)。 (4)委托可以组合链接,以实现一个事件调用多个方法。 (5)委托方法可以不需要

代码猫的理想世界 665

核心组件大换血:Backbone与Neck魔改篇:YOLO26替换EfficientNetV2主干:神经架构搜索(NAS)的最优解嫁接

YOLO26引入EfficientNetV2作为Backbone的改进方案探索了计算机视觉模型优化的前沿方向。文章首先分析了YOLO26默认C3k2模块的局限性,指出其在通道利用效率和缩放策略上的不足。随后重点介绍了EfficientNetV2的核心优势,包括Fused-MBConv模块、训练感知的NAS搜索空间和渐进式学习策略,这些特性使其在精度和效率上保持领先。最后提出了将EfficientNetV2嫁接至YOLO26的具体方案,强调通道对齐这一关键挑战,并给出两种解决方案。这一改进思路展现了&quot

ZDQ58818的博客 309

C#学习笔记:委托

参考书目:C#6.0学习笔记——从第一行C#代码到第一个项目设计(作者周家安)P92 学习目的:了解委托的概念 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Example3_13 { ...

qq_41708281的博客 229

【2026年米哈游春招 - 3月14日 -第一题- 行列相等】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文解决了一个矩阵行列和匹配问题:统计矩阵中行和等于列和的所有行列对数量。算法首先计算每行和每列的元素和,然后利用哈希表统计各行列和的出现次数。通过遍历列和并查询对应的行和出现次数,高效计算出匹配对数。该方法时间复杂度为O(nm),空间复杂度为O(n+m),适用于大规模矩阵数据。代码实现了Python、Java和C++版本,通过哈希表优化避免了暴力枚举,显著提高了计算效率。

m0_73659489的博客 83

【HEC】HECRAS中的降雨边界

网格降雨可能是城市地区建模的一个好选择。这是因为传统的一维(1D)建模并不能完全捕捉城市地区通常出现的复杂流动模式。使用网格降雨建模方法在构建包含多个未定义流动路径的模型时也非常有用。对于流量分支非常复杂的水道,设定边界条件可能会很困难。 HECRAS提供两种降雨边界添加的方法 - 在指定SA/2D FLOW AREA添加降雨边界 - 在hec-ras 6.0以上版本中 “气象数据” 的选项卡,可以添加具有空间变化的降水量、蒸散量和风。 两种方法只能选择一种,以下分别介绍

```On Earth, Be Water, By Coding``` 1400

C#学习记录:委托

盲人和瘸子 一天一个盲人外出,他走在崎岖的路上,时时受阻,正当他感到苦恼时,它遇到了一个瘸子。于是,他就央求说: “朋友,可怜可怜我这个瞎子吧!你告诉我该怎么走可以吗?” “我只是一个瘸子,自己走路还一瘸一拐的感到困难,我如何去帮你,可你看上去倒是挺强壮的。” “我的身体很棒,要是我盟看见路,走起来就不成问题了!” “要不你背上我,我做你的眼睛,你当我的腿

云逸苍穹 250

人形机器人 vs 机器狗SLAM:FAST_LIO_LOCALIZATION_HUMANOID的差异化优化方向

《FAST_LIO_LOCALIZATION_HUMANOID在人形与机器狗应用中的差异化优化策略》摘要: 格灵深瞳开源的FAST_LIO_LOCALIZATION_HUMANOID系统针对人形机器人和机器狗提出了差异化优化方案。人形机器人需应对双足步态带来的周期性晃动,通过动态盲区滤波、二阶运动模型补偿步态相位畸变,并修复重力向量计算误差。机器狗则需解决四足高频运动挑战,包括设计自适应地面分割算法、抑制IMU高频振动噪声,以及基于足端接触序列的非匀速运动建模。二者在传感器配置(高度/视角)、运动频率(1-

Studying…… 326

C#委托学习(一):C#中为什么要引入委托

引言: 对于一些刚接触C# 不久的朋友可能会对C#中一些基本特性理解的不是很深,然而这些知识也是面试时面试官经常会问到的问题,所以我觉得有必要和一些接触C#不久的朋友分享下关于C#基础知识的文章,所以有了这个系列,希望通过这个系列让朋友对C#的基础知识理解能够更进一步。然而委托又是C#基础知识中比较重要的一点,基本上后面的特性都和委托有点关系,所以这里就和大家先说说委托,为什么我们需要委托。

Sayesan的专栏 849

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C#委托学习(二):委托的本质

上一节我们已经和大家分享了我理解的——C#中为什么需要委托,上一节中简单介绍了下委托是什么以及委托简单的应用的,在这节中将对委托做进一步的介绍的,本节主要对委本质和委托链进行讨论。   一、委托的本质  平时我们很容易使用委托——用C# delegate关键字定义委托,再用new操作符构造委托实例,然后通过调用委托实例来调用回调方法(就是用一个了委托对象的变量来代替方法名,这句话如果刚接触的

Sayesan的专栏 1030

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C#委托学习(三):委托链—同时委托多个方法

上一节中介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一个方法,那委托能不能封装多个方法呢?因为生活中经常会听到,我代表大家的意见等这样的说话,既然委托也是一个代表,那他如果只能代表一个人,那他的魅力就不是很大了吧,所以我们就会委托能不能代表多个方法的? 答案是可以的,这就是本节要讲的内容——委托链,委托链也是一个委托,

Sayesan的专栏 8113

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C#开发学习笔记:委托

转载至:https://www.cnblogs.com/akwwl/p/3232679.html C#委托的介绍(delegate、Action、Func、predicate)   委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。   1.委托的声明   (1). delegate delegate我们常用到的一...

JustWantToFly的博客 222

.NET技术学习:C#中的委托

委托是C#中的一种引用类型,类似于C/C++中的函数指针。与函数指针不同的是,委托是面向对象、类型安全的,而且委托可以引用静态方法和实例方法,而函数指针只能引用静态函数。委托主要用于 .NET Framework 中的事件处理程序和回调函数。一个委托可以看作一个特殊的类,因而它的定义可以像常规类一样放在同样的位置。与其他类一样,委托必须先定义以后,再实例化。与类不同的是,实例化的委托没有与之相

guxianga 638

C#学习笔记:委托概念示例

参考书目:C#6.0学习笔记——从第一行C#代码到第一个项目设计(作者周家安)P92 学习目的:掌握委托的概念 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Example3_12 { ...

qq_41708281的博客 225

第20节:C# 委托与事件学习

代码:   //主程序启动类 /**************************  *   *  委托的测试类  * ***********************/ using System; using System.Collections.Generic; using System.Text; namespace 委托与事件认识 {     class Test     {   ...

haibing_zhao的博客 159

C#学习笔记:事件与委托

参考书目:C#6.0学习笔记——从第一行C#代码到第一个项目设计(作者周家安) 学习目的:掌握事件与委托的用法,定义一个委托类型,作为响应按下空格键这一事件。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; u...

qq_41708281的博客 235

C# 学习笔记:委托(1)

委托是函数指针功能在C#中的实现。 委托包装了方法,我们在C#中使用委托来间接调用方法。委托是调用该方法时要操作的对象的包装器。 委托是一种类,继承自MulticastDelegate类。它最重要的三个字段分别是: 字段 类型 作用 _Target System.Object 改字段为表明委托所在的类或实例对象。 若委托包装静态方法时:此处为n...

MEIGAZAMU 256

C#学习第13天:委托(Delegate)

C#中委托的使用Delegate的使用,以及Action,Func,Lambda表达式等使用方法

ghost143的博客 552

C#学习笔记(四):【委托】

委托(delegate)它允许像处理其他任何数据那样处理对方法的引用。 Lambda表达式是C#3.0开始假如的,C#2.0支持用匿名方法(anonmous method)这种不太优雅的语法创建自定义委托)。 ...

skdwlj的博客 248

C#委托学习:委托实现窗体之间简单传值

实现功能描述: 从窗体点击按钮,并记录点击次数,将点击的次数传递给主窗体展示。 UI设计: 主窗体:拖放两个Label:label1和lblCounter,label1的Text属性设置为“从窗体被点击次数:”,lblCounter的Text属性设置为“0”。从窗体:拖放一个Button:btnAddOne,Dock属性设置为“Fill”。   功能实现: 【1】声明委托 ...

YouyoMei的博客 1407

C#学习第十一课:委托

委托是一种类,类是一种数据类型,所以委托也是一种数据类型public delegate int Calc(int a,int b)//自定义一个委托,委托声明的位置在Main函数外面//使用delegate关键字声明int Z = 0;注:1、委托与所封装的方法必须类型兼容;2、声明委托的位置要注意,在Main函数外,且不能在Class内,也不能放在方法内。

m0_57445579的博客 62
上一篇: ASP.NET缓存:用户控件缓存
下一篇: C#学习:事件
云喜君
博客等级 码龄19年 2粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值