C#与JAVA之比较.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#与JAVA之比较C#、Java之比较   自动回收垃圾内存,并且消除了指针(在C#中可以使用指针,不过必须注明unsafe关键字)   都不需要头文件,所有的代码都被“包(package)”限制在某个范围内,并且因为没有头文件,所以消除了类定义的循环依赖   所有的类都是从对象派生出来,并且必须使用New关键字分配内存   用对象加锁的方式来支持多线程   都具有接口(interface)的概念 内部类   继承类的时候不会以某种特定的访问权限来继承;   没有全局函数或者常量,一切必须属于类;   数组或者字符串都自带长度计算和边界检查;   只使用“.”操作符,没有“-”和“::”;   “null”、“boolean”和“bool”成为了关键字;   任何变量均在使用前进行初始化;   不能使用整数来返回到if条件语句中,必须使用布尔值;   “Try”模块后可以有“finally” ; 3. 属性(Property)   属性的概念对大家来说应该是很熟悉的,类成员函数可以自由地访问本类中的任何属性成员。不过若要从一个类中去访问另一个类中的属性,那就比较麻烦了,所以很多时候我们使用Getxxx和Setxxx方法,这样看起来显得极不自然,比如用Java或者C++,代码是这样的:   foo.setSize (getSize () + 1);   label.getFont().setBold (true);   但是,在C#中,这样的方法被“属性化”了。同样的代码,在C#就变成了:   foo.size++;   label.font.bold = true;   可以看出来,C#显然更容易阅读和理解。我们从这个“属性方法”的子程序代码中,也可以看到类似情况: Java/C++: public int getSize() {   return size; } public void setSize (int value) {   size = value; } C#: public int Size {  get{return size;}  set{size = value;} }   为了区分这种属性化的方法和类的属性成员,在C#中把属性成员称作“域(field)”,而“属性”则成为这种“属性化的方法”专用的名词。顺便说一句,其实这样的属性化方法在VB和DELPHI中是经常碰到的,在VB中它也就叫属性。   另外,在C#中Get和Set必须成对出现,一种属性不能只有Get而没有Set(在Java和C++中就可以只有Get或者只有Set),C#中这样做的好处在于便于维护,假如要对某种属性进行修改,就会同时注意Get和Set方法,同时修改,不会改了这个忘了那个。 4、对象索引机制(Indexer)   C#中引入了对象索引机制。说得明白点,对象索引其实就是对象数组。这里和上一节中的属性联系起来讲一下,属性需要隐藏Get和Set方法,而在索引机制中,各个对象的Get或者Set方法是暴露出来的。比如下面的例子就比较清楚地说明了这一点。 public class Skyscraper {  Story[] stories;  public Story this [int index] {   get {    return stories [index];   }   set {    if (value != null) {     stories [index] = value;    }   }  } ... } 5. 指代(Delegate)   指代这个玩意很特别,它有点象指针,但又不完全是,不过大家还是可以把它理解为一种类型安全的、面向对象的指针。(什么是类型安全和面向对象就不用讲了吧?)顺便提一句,有很多书上把Delegate翻译成代理,我觉得这样翻不够确切,翻译成“指代”更恰当些,道理上吻合,并且还符合它的本来意思——微软本来就是用Delegate来 “取代指针”,所以叫“指代”,呵呵。   说起指代,也许至今Sun还会对它愤愤不已,为什么呢?因为在Sun的标准Java中是没有这个东西的,它是微软99年发布的MSVJ++6添加的“新特性”。为此,两家公司吵得不亦乐乎,并且还专门在网上写了大量文章互相攻击,有兴趣的朋友可以去看看(只有英文版)。 http://www.J/docs/white/delegates.html /visualj/technical/articles/delegates/truth.asp   话归正传,指代有什么特点呢?一个明显的特点就是它具有了指针的行为,就好象

文档评论(0)

71z7it87 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档