多年以来,很多人认为微软与SUN是两大对立公司,究其原因是C#与java的存在,使之成为两大公司相互抗衡的武器。因为C#与java在很大地方都是很相似的,尽管如此,两者不同的地方也很多,所谓“于细微处见差异”。那么两者的相似和区别都在什么地方呢?下面小编就与大家一起分享C#与java的对象索引机制、指代的区别,希望对大家有所帮助。
1对象索引机制(Indexer) copyright dedecms
copyright dedecms
C#中引入了对象索引机制。说得明白点,对象索引其实就是对象数组。在上一篇文章中小编讲到属性,这里和上一篇文章中的属性联系起来一起说下,属性需要隐藏Get和Set方法,而在索引机制中,各个对象的Get或者Set方法是暴露出来的。比如下面的例子就比较清楚地说明了这一点。 内容来自dedecms
dedecms.com
public class Skyscraper copyright dedecms
{
Story[] stories;
织梦内容管理系统
public Story this [int index] {
本文来自织梦
get {
return stories [index]; 织梦好,好织梦
}
本文来自织梦
set { 织梦好,好织梦
if (value != null) { 内容来自dedecms
stories [index] = value; copyright dedecms
}
}
} 织梦内容管理系统
...
} copyright dedecms
本文来自织梦
Skyscraper empireState = new Skyscraper (...);
empireState [102] = new Story ("The Top One", ...);
内容来自dedecms
2 指代(Delegate)
本文来自织梦
指代这个玩意很特别,它有点象指针,但又不完全是,不过大家还是可以把它理解为一种类型安全的、面向对象的指针。顺便提一句,有很多书上把Delegate翻译成代理,我觉得这样翻不够确切,翻译成“指代”更恰当些,道理上吻合,并且还符合它的本来意思——微软本来就是用Delegate来“取代指针”,所以叫“指代”啊。 copyright dedecms
织梦好,好织梦
说起指代,也许至今Sun还会对它愤愤不已,为什么呢?因为在Sun的标准Java中是没有这个东西的,它是微软99年发布的MSVJ++6添加的“新特性”。为此,两家公司吵得不亦乐乎,并且还专门在网上写了大量文章互相攻击。
copyright dedecms
话归正传,指代有什么特点呢?一个明显的特点就是它具有了指针的行为,就好象从Java又倒回到了C++。在C#中,指代完成的功能大概和C++里面的指针,以及Java中的接口相当。但是,指代比起C++的“正宗指针”来又要高明一些,因为它可以同时拥有多个方法,相当于C++里面的指针能同时指向多个函数,并且是类型安全的,这一点体现了它的“对象”特性;而比起Java的接口来,指代高明的地方在于它能可以不经过内部类就调用函数,或者用少量代码就能调用多种函数,这一点体现了它的“指针”特性。









