C#委托初学

1、什么是委托

  委托可以认为是包含具有相同签名和返回值类型的有序方法的对象。

2、声明委托类型

  委托是类型,和类一样,委托类型必须在被用来创建变量以及类型的对象之前声明。

  委托中所包含的方法必须与声明委托的返回值类型、签名相同。

例:delegate void HelloWord(string name);

  委托类型声明与方法有两个不同:1以关键字delegate开头,没有方法主体“;”代替。

3、创建委托对象

委托是引用类型,因此有引用和对象。在委托类型声明之后,可以声明变量并创建类型的对象。

委托类型名    变量        方法

HelloWord chinese = Chinese;

HelloWord chinese = new HelloWord(Chinese);

方法可以使实例方法或静态方法都可以。

Program pro = new Program();

HelloWord english = pro.English;

4、赋值委托

由于委托是引用类型,我们可以通过赋值来改变包含在委托变量中的引用。

例:HelloWord chinese = Chinese;

HelloWord chinese = Chinese2;//上一个委托会被销毁

5、组合委托

委托可以使用运算符来组合创建新的委托。

HelloWord ChineseAndEnglish = chinese + english;

6、委托增加方法

  HelloWord chinese += pro.English;

增加方法实际上是生成了一个新的委托,其调用列表是左边的委托加上右边的方法的组合。

  方法是加在调用方法列表的最底部。

7、委托移除方法

  HelloWord chinese -= pro.English;

  和增加方法一样也是生成了一个新的委托,新的委托是旧的委托的副本,只是没有了被移除方法的引用。

移除委托的注意事项:

    -=运算符从列表最后开始搜索并移除一个匹配的方法;

    试图删除不存在方法没有效果;

    试图删除空委托会抛出异常;

    可以把委托和null比较判断委托的调用列表是否为空,为空则为null;

8、调用委托

  用于调用委托的参数会被调用与列表的每一个方法(除非有一个参数是输出参数)

  一个方法可以在列表中出现多次,每次调用到方法时都会被调用一次。

    delegate void HelloWord(string name);
    class Program
    {
        static void Chinese(string name)
        {
            Console.WriteLine("你好:" + name);
        }
        void English(string name)
        {
            Console.WriteLine("Hello:" + name);
        }
        static void Main(string[] args)
        {            HelloWord chinese = Chinese;
            Program pro = new Program();            HelloWord english = pro.English;
            chinese("小明");
            english("Alex");
        }
    }

后面的慢慢补充。

时间: 2024-08-08 05:20:40

C#委托初学的相关文章

初学委托

首先要知道委托是什么,委托实际上就相当于C语言中的函数指针 一 声明委托 示例:delegate void StringProcessor(string input); 这是一个返回值为空的委托声明,其中声明的参数必须是string 类型,同时比较写出返回类型(这个类型必须与委托指向的方法的返回值的类型一致); 二 创建委托示例 示例 : jonProcessor = new StringProcessor(jon.Say); tomProcessor = new StringProcessor

初学事件委托

刚开始接触到事件委托这个概念,还是看javascritp高级程序设计接触到的(js学习必备的书有木有). 知道了什么是事件冒泡机制,(事件捕获因为不常用就不说了),然后明白了为什么会有事件委托的产生,其实在学习html的时候,就应该明白一个网页不只是平面的,更是立体的,一个页面实际的空间比我们眼睛看到的还要多的多,就像隐藏在海平面下的冰山一样. 如果明白了网页是立体的就好理解为什么有事件冒泡这个东西了.当你鼠标点击或者划过的时候,并不只是点击了最上面的一层,在这个点击的地方重叠的所有元素其实都被

Unity之一天一个技术点(十九)--初学委托

委托这个对于C#初学者比较头疼,我也是看了半天资料才稍微弄懂一点,下面的代码还是挺简单的,也算用了委托这么逼格高的技术了. using UnityEngine; using System.Collections; //三个军衔级别的命令类型// public enum TypeOfCommands { General, Captain, Soldier } public class EventManager : MonoBehaviour { //定义一个通用代理,根据传递类型,发送消息 pub

初学笔记(C#委托)

1.委托的概述 简单说,委托就是把方法当作参数传递. 委托(delegate)是一种动态调用方法的类型,它与类.接口和数组一样,都属于引用型.在C#中,可以申声明委托类型.创建委托实例.把方法封装在委托对象中.一个完整的饭否发具有方法名.返回值和参数列表,用来引用方法的委托也要求必须具有相同的返回值和参数列表. 委托对象的本质代表了方法的引用(即内存地址),具有以下特点: 与C++中的指针相似,但不同的是委托是完全面向对象的,是安全的数据类型. 委托允许将方法作为参数传递. 委托可用回调函数.

.net初学之定义委托、事件

1.委托关键字:delegate 语法: [访问修饰符]  delegate 返回类型 委托名(); 类似C语言中的指针,指向另一个与他参数列表和返回类型相同的方法. 2.事件关键字:event 语法: [访问修饰符] event 委托名 事件名: 特殊的委托: 由一个行为引发的系列行为的并发. 有委托才有事件.

C#语法之委托和事件

从大学就开始做C#这块,也做C#几年了,最近又从ios转回.Net,继续做C#,之前也没有写博客的习惯,写博客也是从我做ios的时候开始的,现在既然又做回了.net,那就写点关于.Net的博客,可能在大牛眼里这些都是简单基础的,不过回过头看我当时初学的时候觉得委托事件是不容易理解的,我这里也是想着联系着OC,两者有比较的学习下.毕竟都是面向对象语言,思想是相通的. 委托在OC中类似block,都是指向一个函数,其实他没和C++的函数指针类似.但委托还是和函数指针不太一样,委托是完全面向对象的,是

C#获取局域网IP、MAC地址和端口的初学

首先非常感谢Melou的http://www.cnblogs.com/luoht/archive/2009/12/18/1627431.html的随笔,对于初学C#的我,参考你的随笔对我的学习真是有莫大帮助. C#遍历局域网的几种方法: 1.微软社区上介绍了使用Active Directory 来遍历局域网 首先我们来了解DirectoryEntry类是一个什么类. 命名空间:  System.DirectoryServices程序集:  System.DirectoryServices(在 S

初学笔记(C#事件)

1.声明事件      EventHandler是一个预定义的委托,它定义了一个无返回值的方法.在 .Net Fromwork中,他的格式: public  delegate  void EventHandler (Object  sender, EvenArgs  e) 其中sender的类型为Object,表示时间发布者本身,e用来传递事件的相关信息,数据类型为EvenArgs及其派生类. 标准的EvenArgs并不包含任何事件数据, 因此EventHandler专用于表示不生成数据的事件的

初学ios遇到问题记录01

刚刚接触IOS,花了一段时间看我基础部分的OC后 就想试着弄个小程序,于是看到 http://www.cnblogs.com/LooDo/p/3907064.html博文中的小程序,博主分析的很详细,自己也想练手试试看,遇到 Application windows are expected to have a root view controller at the end of application launch 这个问题,一直调试不通代码. 归咎原因: 博主用的xcode版本是4.2版本以前