• C# vs JAVA


    比对JAVA,C#的特性实现如下:

    程序组织:

      java中用域名表示的包来划分子程序;而C#中使用和C++一样的命名空间。(TODO C#中的"::"运算符和"."在命名空间结构中的区别?)

      TODO java中一个应用程序由几个包组成,你可以发布一个包给其它人来使用,在C#中,可以发布一个命名空间吗?

      C#并没有按照命名空间,在磁盘上将代码文件分开管理。

      TODO C#的访问控制

    类型:

      C#的基本类型有unsigned,但是JAVA没有。

      TODO C#中的delegate类型。

          C#中除了constant对应JAVA中的final外,还有

        // Can be set to a const or a variable. May be initialized in a constructor.
        readonly int MAX_HEIGHT = 9;

    对象:

      C#的对象生命期和JAVA一样,是由垃圾回收器确定的。TODO Finalize, Dispose, Close。C#使用析构函数,和JAVA的finalize不同之处是,基类的析构函数(也意味着finalize函数)会在派生类的析构函数被调用的时候被调用。

      运行时类型检查:C#提供 is 运算符实现运行时类型检查。

      C#的getter和setter的语法糖衣,使用别名来控制访问,这样的目的是,你的访问行为可以包含逻辑代码,而不是简单的读写它的内存。

      C#对于继承中的方法重载机制显得繁琐,还是觉得JAVA中的默认重载比较符合面向对象的思想。

      访问控制符:JAVA对protected的解释和C++的不一致,它表示可以被同一个编译单元的对象访问。而C#和C++的一致,表示只有它的派生类可以访问。而使用了internal这个更加恰当的单词来表示同一个编译单元的访问权限。

      JAVA足以称得上对C#的killer feature就是内部类,C#不可以像JAVA一样,在一个类的任意代码块中定义一个类,这样就没有匿名内部类;而且C#的所谓内部类不能使用外部类的方法,这使得C#的外部类对内部类来说,只是命名空间的类似作用,功能薄弱。

      C#的delegate,额,函数子的概念吗?这个特性完全可以用interface代替的,像

      Thread t = new Thread(new ThreadStart(wt.PerformTask));

      的代码和JAVA比较起来显得繁琐。

    容器:

    并行:

      C#的同步方法的实现:

    C# Code
    using System;
    using System.Runtime.CompilerServices;
    
    public class BankAccount{
    
     [MethodImpl(MethodImplOptions.Synchronized)]
     public void WithdrawAmount(int num){ 
    
       if(num < this.amount)
         this.amount - num; 
    
     }
    
    }//BankAccount
    感觉很蹩脚。

    for each语法

      foreach(string arg in args) ...

    非静态代码

  • 相关阅读:
    事务数据oracle 锁1
    编译文件系统移植linux3.0.62 + busybox最小系统到单板TQ2440
    事务说明[tomcat] spring2.5.6 + hiberante3.1.3 + atomikos3.8.0 多数据源事务配置
    字符判断字母顺序问题
    维度字段缓慢渐变维度的处理方式
    nullnull提取汉字第一个字母
    期望连续2013百度之星4.27月赛 题目一 Fir
    覆盖距离AsiaHatyai2012 & LA 6144 Radiation 二分搜索
    冒泡,插入,希尔,快排的比较
    链表打印从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/2059949.html
Copyright © 2020-2023  润新知