17
回答
5个 C# 和 Java 之间的不同方法
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
C#和Java之间最大的区别之一,是如何处理的方法。在这两种语言,方法是功能代码的基石:他们定义变量,并指定对这些变量进行操作,返回值给其他方法使用。尽管Java语言的创建者遵循了许多基于C语言的概念,他们研发的方法允许更少的限制和增加更多的灵活性。

#1: Virtual 方法
C#:方法默认是非虚方法
Java:方法默认是虚方法
虚方法允许任何类继承,并重写其方法。在Java中,所有方法默认是虚方法。此默认设置防止插入的一个与继承类同名的不相关的方法。

在C#中,开发人员必须明确指定带“virtual”关键字的虚方法:
public class Dimensions
{
    public const double pi = Math.PI;
    protected double x, y;
    public Dimensions()
    {
    }
    public Dimensions (double x, double y)
    {
        this.x = x;
        this.y = y;
    }

    public virtual double Area()
    {
        return x*y;
    }
}

继承类要使用虚方法,该方法必须加上“override”关键字:

public class Circle: Dimensions
{
    public Circle(double r): base(r, 0)
    {
    }

    public override double Area()
    {
        return pi * x * x;
    }
}


#2: Generator 方法
C#:支持generator方法
Java:不支持generator方法  
generator方法允许开发人员控制如何循环处理每一次迭代。而不是创建一个组,generator方法返回每次迭代后的值作为循环过程的代码。Java没有内置处理generator方法的功能,假设在Java中有这些功能代码,往往也是庞大而复杂的。C#使用“IEnumerable”接口创建generator函数和“yield”命令返回值:

public class TexasCityCollection : IEnumerable<string> {
    public IEnumerator<string> GetEnumerator() {
        yield return "Houston";
        yield return "Auston";
        yield return "Dallas";
        yield return "San Antonio";
    }
}


#3: Partial 方法

C#:支持并限制分部方法
Java:不支持分部方法
Java不支持分部方法。在C#中,分部方法是允许的,但必须符合特定的限制:   
  · 分部方法方法名必须相同。  
  · 分部方法必须返回void。  
  · 分部方法默认是“private”,而且不接受任何修饰符。


#4: Extension 方法
C#:支持扩展方法
Java:不支持扩展方法
扩展方法允许开发人员包括他们当前类型的方法,而不需要创建一个新类型或者修改现有的类型。当前的Java语言不支持扩展方法,但是其特性会考虑放在将来的版本中。


#5: Conditional 条件编译
C#:支持条件编译
Java:有限的支持条件编译
C#编译器允许条件编译:开发者可以输入参数来确定项目编译哪些方法来使用。Java也允许条件编译,但这种做法通常是在调试过程中使用。





原英文链接 , OSChina.NET编译
举报
迷途d书童
发帖于6年前 17回/4K+阅
共有17个评论 最后回答: 5年前
纯语言层面上C#绝对更先进一些。当然,主要是因为java很久没有过大 的改动了。。。。
--- 共有 6 条评论 ---
冰力C#感觉轻快很多,而且本身很强大高效。Java这虚拟机总感觉臃肿,慢。 6年前 回复
烟头我也是一直用java,但是对别的语言也了解过一些。也羡慕妒忌过其他语言的一些特性,都说语言不重要,但是一门好的语言绝对可以大大提升生产力。java丰富的类库可以抵消一部分,但还是不够。 C#绝对一门好语言,希望java能借鉴一部分 6年前 回复
烟头我也是一直用java,但是对别的语言也了解过一些。也羡慕妒忌过其他语言的一些特性,都说语言不重要,但是一门好的语言绝对可以大大提升生产力。java丰富的类库可以抵消一部分,但还是不够。 C#绝对一门好语言,希望java能借鉴一部分 6年前 回复
fair_jm也是 语言层面上如果后来者比老者更落后就没有意义了 不过oracle也承诺了很多 就静待了『主观上还是觉得这个文章是黑java……全说了c#有但java没的 java特有什么?我不知道 我没学过c#』 6年前 回复
费斯特呵呵 6年前 回复

比語法當然是C#勝於Java

但是許多知名且重要的Open Source Project都是使用Java或C++寫成

例如:hadoop

況且你在JVM平台如果不喜歡Java語法的落後

可以使用Scala或Groovy

這兩種語言除了語言先進且簡潔

目前都有成功使用的案例

ex :Twitter的Server端已經遷移到Scala/JVM

 

--- 共有 3 条评论 ---
s3051024回复 @冰力 : 況且Java真的不流行,變成跟COBOL一樣 JVM是不會死的,頂多換另外一種JVM 程式語言(EX :Scala、Groovy) 取代Java 。 目前有不少知名的Internet公司使用Scala ex:Twitter、foursquare 6年前 回复
s3051024回复 @冰力 : 先等Mono真的有獲得多人支持吧 現況就是Mono沒有獲得一些傳統大型公司支持(微軟例外) 加上一些大型網站在技術選擇上,優先考慮的是PHP或Java 6年前 回复
冰力因为Mono支持很多人认为不可靠而已,如果Mono有很多支持很成熟的发展,那Java就没什么好戏了。 6年前 回复
顶部