C#指代的功能介绍

开发 后端
这里介绍C#指代这个玩意很特别,它有点象指针,但又不完全是,不过大家还是可以把它理解为一种类型安全的、面向对象的指针。

在向大家详细介绍C#指代之前,首先让大家了解下C#对象索引机制,然后全面介绍C#指代。

C#对象索引机制(Indexer)

C#中引入了对象索引机制。说得明白点,对象索引其实就是对象数组。这里和上一节中的属性联系起来讲一下,属性需要隐藏Get和Set方法,而在索引机制中,各个对象的Get或者Set方法是暴露出来的。比如下面的例子就比较清楚地说明了这一点。

  1. public class Skyscraper  
  2. {  
  3. Story[] stories;  
  4. public Story this [int index] {  
  5. get {  
  6. return stories [index];  
  7. }  
  8. set {  
  9. if (value != null) {  
  10. stories [index] = value;  
  11. }  
  12. }  
  13. }  
  14. ...  
  15. }  

C#指代(Delegate)

C#指代这个玩意很特别,它有点象指针,但又不完全是,不过大家还是可以把它理解为一种类型安全的、面向对象的指针。(什么是类型安全和面向对象就不用讲了吧?)顺便提一句,有很多书上把Delegate翻译成代理,我觉得这样翻不够确切,翻译成“指代”更恰当些,道理上吻合,并且还符合它的本来意思——微软本来就是用Delegate来“取代指针”,所以叫“指代”,呵呵。

说起指代,也许至今Sun还会对它愤愤不已,为什么呢?因为在Sun的标准Java中是没有这个东西的,它是微软99年发布的MSVJ++6添加的 “新特性”。为此,两家公司吵得不亦乐乎,并且还专门在网上写了大量文章互相攻击,有兴趣的朋友可以去看看(只有英文版)。
◆http://www.Javasoft.com/docs/white/delegates.html
◆http://msdn.microsoft.com/visualj/technical/articles/delegates/truth.asp

话归正传,指代有什么特点呢?一个明显的特点就是它具有了指针的行为,就好象从Java又倒回到了C++。C#指代完成的功能大概和C++里面的指针,以及Java中的接口相当。但是,指代比起C++的“正宗指针”来又要高明一些,因为它可以同时拥有多个方法,相当于C++里面的指针能同时指向多个函数,并且是类型安全的,这一点体现了它的“对象”特性;而比起Java的接口来,指代高明的地方在于它能可以不经过内部类就调用函数,或者用少量代码就能调用多种函数,这一点体现了它的“指针”特性。

【编辑推荐】

  1. C#线程同步详细分析
  2. C#探讨木马程序浅谈
  3. C# Pop3Connection类简介
  4. C#数据类型简单介绍
  5. C#计算素数序列浅谈
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-12 18:35:36

C# ArrayLis

2009-08-26 11:30:16

C# Arraylis

2009-09-02 17:44:41

C#字符串处理

2009-09-02 17:20:50

C# Parsing

2009-08-10 16:30:56

C# BitmapDa

2009-08-17 16:47:51

C# Anonymou

2009-08-25 10:24:29

C# delegate

2009-08-03 14:09:15

C#调用API

2009-08-03 14:54:23

值类型C#

2009-07-31 14:15:38

C# 构造函数

2009-08-12 15:43:02

操作C# Datase

2009-08-04 08:48:44

C#内置特性

2009-08-18 16:45:40

C# Raw Sock

2009-08-12 09:41:28

C# Director

2009-09-03 15:57:11

C# SystemMe

2009-08-12 15:34:40

C# DBNull

2009-08-05 18:28:05

C#异常处理

2009-09-02 11:02:57

C#动态数组

2010-01-15 18:35:25

C++的类

2009-08-18 09:26:07

C#线程功能
点赞
收藏

51CTO技术栈公众号