C#中的接口、事件、代理总结
C++与C#之间语法大都基本相同,其面向对象的思想也是一致的,但是C#比C++还是有很多的区别,下面就C#中新添的接口、事件、代理来谈一谈。
1、接口
接口是定义了类要实现的一系列方法,但是他自己并不实现它,只是以逻辑结构的方式来描述类所提供的一系列没有具体实现的方法。
简单的接口声明格式如下:
接口中的方法默认为public,不用显式指定访问属性。
除了方法名称,接口还声明了属性、索引、和事件的名称,任何成员都不能声明为static.当一个类实现一个接口时,就必须实现整个接口,不能选择要实现接口的哪个部分。
1.1使用接口引用
可以创建接口引用变量,该变量可以引用任何实现接口的对象。该方法是执行对象实现的方法版本。这个过程类似于基类引用访问派生类对象的情况。
1.4显示实现
创建接口成员的显式实现由两个原因。第一,一个类有可能同时实现两个接口,每个接口都声明了相同名字和类型的方法。因此,采用全称作用域能消除歧义。第二,当使用全称作用域实现一个方法时,就相当于提供了不是处于类外代码的一个私有实现。
二、代理
代理就是一个可以引用方法的对象,和c\c++中的函数指针相似。
代理的建立过程就是首先声明一个代理通过关键字delegate
格式如下:delegate ret_type name(papam-list)
然后通过创建这个代理的引用,将这个代理进行对象实例化,也就是代理创建一个函数的模型,通过指定其函数的返回值、参数类型和个数,那么这个这函数具体做了什么在运行时通过赋予它的对象来决定。
之后要调用这个函数,只需要将这个代理的引用直接将参数传进去了。
2.1多播
代理有一个比较吸引人的特性是支持多播。也就是支持创建方法链表的能力。但是使用多播有一个限制就是要函数的返回类型为void.多播时只需要通过+=来将方法加入到代理中。
三、事件
事件就是自动通知某个事件发生。关心某事件的对象向事件中注册事件处理,当事件发生时,就会调用所有已注册的事件处理程序。事件处理程序要用代理来表示。
事件是类成员,并以event声明,一般格式如下:
event event-delegate objec-name;
所有的事件是通过代理来激活的
1、接口
接口是定义了类要实现的一系列方法,但是他自己并不实现它,只是以逻辑结构的方式来描述类所提供的一系列没有具体实现的方法。
简单的接口声明格式如下:
1
interface name![](/Images/dot.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
接口中的方法默认为public,不用显式指定访问属性。
除了方法名称,接口还声明了属性、索引、和事件的名称,任何成员都不能声明为static.当一个类实现一个接口时,就必须实现整个接口,不能选择要实现接口的哪个部分。
1.1使用接口引用
可以创建接口引用变量,该变量可以引用任何实现接口的对象。该方法是执行对象实现的方法版本。这个过程类似于基类引用访问派生类对象的情况。
1.4显示实现
创建接口成员的显式实现由两个原因。第一,一个类有可能同时实现两个接口,每个接口都声明了相同名字和类型的方法。因此,采用全称作用域能消除歧义。第二,当使用全称作用域实现一个方法时,就相当于提供了不是处于类外代码的一个私有实现。
二、代理
代理就是一个可以引用方法的对象,和c\c++中的函数指针相似。
代理的建立过程就是首先声明一个代理通过关键字delegate
格式如下:delegate ret_type name(papam-list)
然后通过创建这个代理的引用,将这个代理进行对象实例化,也就是代理创建一个函数的模型,通过指定其函数的返回值、参数类型和个数,那么这个这函数具体做了什么在运行时通过赋予它的对象来决定。
之后要调用这个函数,只需要将这个代理的引用直接将参数传进去了。
2.1多播
代理有一个比较吸引人的特性是支持多播。也就是支持创建方法链表的能力。但是使用多播有一个限制就是要函数的返回类型为void.多播时只需要通过+=来将方法加入到代理中。
三、事件
事件就是自动通知某个事件发生。关心某事件的对象向事件中注册事件处理,当事件发生时,就会调用所有已注册的事件处理程序。事件处理程序要用代理来表示。
事件是类成员,并以event声明,一般格式如下:
event event-delegate objec-name;
所有的事件是通过代理来激活的