首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>cc++>正文

与C/C 指针相似的C#代表元及事件触发

http://www.oklinux.cn  2008-03-07  来源: ChinaITLab ChinaITLab  会员收藏  游客收藏  【 】 

代表元是C#中比较复杂的概念,C#中的代表元和C/C 中的函数指针非常相似使用代表元可以把代表元内部方法的引用封装起来然后通过它使用代表元引用的方法。

它有一个特性就是不需要知道被引用的方法属于那一个类对象只要函数的参数个数与返回类型与代表元对象一致。这样说可能比较抽象我下面举几个简单的例子希望能给广大初学者一些基本的认识。

//定义一个返回值为string的无参数的代表元
注意这个代表元只能引用对象中
返回值为string的无参数方法
  delegate string MyDelegate();
  public class MyClass
  {
  public string SayHello()
  {
  return "Hello the world!";
  }
  
  }
  public class TestMyClass
  {
  public static void Main(string[] args)
  {
  MyClass myClass1=new MyClass();
  MyDelegate myDelegate1=new MyDelegate(myClass1.SayHello);
  //下面就使用myDelegate1代替对象myClass1的SayHello方法
  System.Console.WriteLine(myDelegate1());
  //输出结果为hello the world!
与调用myClass1.SayHello();效果相同
  }
  }

如果代表元只有这点功能它就没有什么太大的用处了,代表元还有一个非常有用的功能就是定义复合代表元对象只有同样类型的代表元才能够复合起来 能定义复合代表元对象 - 从一个复合代表元中去掉一个代表元对象:

delegate void MyDelegate(string s);
  public class MyClass
  {
  public void SayHello(string who)
  {
  System.Console.WriteLine( who "hello!");
  }
  public void SayGoodBye(string who)
  {
  System.Console.WriteLine( who "good bye!");
  }
  
  }
  
  public class TestMyClass
  {
  public static void Main(string[] args)
  {
  MyClass myClass1=new MyClass();
  MyDelegate myDelegate,myDelegate1;
  myDelegate=new MyDelegate(myClass1.SayHello);
  myDelegate1=new MyDelegate(myClass1.SayGoodBye);
  myDelegate =myDelegate1;
  //这样调用myDeletage就相当于同时调用了
myClass1.SayHello和myClass1.SayGoodBye
  myDelegate("love.net ");
  //执行结果输出love.net hello! love.net good bye!
  }
  }

事件驱动是windows应用程序的重要特征C#代表元就是用于产生事件,事件就是用于在一个组件中监听这个组件的变化。下面再举一个简单的例子:

//定义一个事件代理(代表元)
  public delegate void EventHandler
(string str);
  //定义事件源类
  class EventSource
  {
  //定义代表元作为事件源类的成员
  public event EventHandler Say;
  public void TriggerEvent()
  {
  if
  //因为Say是个代表元所以执行Say方法
所做的实际操作由注册到它的事件处理函数决定
  Say("A event take place!");
  }
  }
  //测试
  class Test
  {
  public static void Main()
  {
  EventSource aEventSource=new EventSource();
  //注册事件处理函数为MyEvent 
显示一串字符类似于this.Click =new 
EventHandler(Button1_OnClick);
  aEventSource.Say =new EventHandler(MyEvent);
  //此处为演示事件触发过程所以就用程序自动触发
  //在图形界面应用程序中,一般由用户触发事件,
后由操作系统发送消息并调用处理函数 
所以程序员只要注册事件处理函数
  //和编写事件处理函数的代码其他就不用关心了
  aEventSource.TriggerEvent();
  }
  //事件处理函数
  public static void MyEvent(string str)
  {
  System.Console.WriteLine(str);
  }
  
  }

  


上一篇:如何在Linux桌面上搭建C/C IDE开发环境   下一篇:初学者必备:教你理解复杂的C/C 声明


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·初学者必备:教你理解复杂的C/C 声明
·如何在Linux桌面上搭建C/C IDE开发环境
·编程秘籍篇:C语言高效编程的四大绝招
·Windows下C语言网络编程快速入门
·细述C/C 字符指针数组及指向指针的含义
·教您在C/C 中如何构造通用的对象
·初学者编程入门:学习C 的最大难度
·C 编程中的四个调试小技巧
·详细解析C 编写的ATM自动取款机模拟程序
·初学者编程入门:C 实用技巧讲解
·编程初级班:C语言程序设计入门系列之一
·初学者编程入门:C 指针使用方法
·初学者编程入门:C语言指针使用方法
·编程初级班:C语言程序设计入门系列之二
·感触C语言中的面向对象思想
·专家教您如何在C语言中巧用正则表达式
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·用Eclipse平台进行C/C 开发
·在 Linux 中使用共享对象
·VS:针对Java开发人员的C#编程语言
·使用智能设备扩展在C#中开发自定义控件
·Visual C# 常见问题
·二级C语言实例解答
·一种被忽视的构造和整数溢出重现
·轻轻松松C to C
·与用于 C 的ISO标准保持一致
·用C 的托管扩展针对Windows编程
·运行时和编译时的安全性检查
·轻轻松松C to C (二)
  阅读排行
·c/c++ 学习-read 函数和 write 函数
·程序员眼中的qmail(qmail源代码分析)
·Awk 基础入门:Awk 实例编程
·autoconf 和automake生成Makefile文件
·Linux下的多进程编程
·入门文章:教你学会编写Linux设备驱动
·C++自动化(模板元)编程基础与应用
·使用 GDB 调试多进程程序
·Qt 不规则窗体的实现
·嵌入式程序员应知道的几个基本问题
·Linux操作系统中GCC的应用介绍
·C语言中的指针和内存泄漏
·用GNU profiler提高代码运行速度
·vi 中的正则表达式 (Regular Expressio
·Linux 套接字编程中的 5 个隐患
网摘收藏: