5个C#和Java之间的不同方法

开发 后端
C#和Java之间最大的区别之一,是如何处理的方法。在这两种语言,方法是功能代码的基石:他们定义变量,并指定对这些变量进行操作,返回值给其他方法使用。尽管Java语言的创建者遵循了许多基于C语言的概念,他们研发的方法允许更少的限制和增加更多的灵活性。

C#和Java之间最大的区别之一,是如何处理的方法。在这两种语言,方法是功能代码的基石:他们定义变量,并指定对这些变量进行操作,返回值给其他方法使用。尽管Java语言的创建者遵循了许多基于C语言的概念,他们研发的方法允许更少的限制和增加更多的灵活性。

#1: Virtual 方法

C#:方法默认是非虚方法

Java:方法默认是虚方法

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

在C#中,开发人员必须明确指定带“virtual”关键字的虚方法:

  1. public class Dimensions  
  2. {  
  3.     public const double pi = Math.PI;  
  4.     protected double x, y;  
  5.     public Dimensions()  
  6.     {  
  7.     }  
  8.     public Dimensions (double x, double y)  
  9.     {  
  10.         this.x = x;  
  11.         this.y = y;  
  12.     }  
  13.  
  14.     public virtual double Area()  
  15.     {  
  16.         return x*y;  
  17.     }  

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

  1. public class Circle: Dimensions  
  2. {  
  3.     public Circle(double r): base(r, 0)  
  4.     {  
  5.     }  
  6.  
  7.     public override double Area()  
  8.     {  
  9.         return pi * x * x;  
  10.     }  

#2: Generator 方法

C#:支持generator方法

Java:不支持generator方法  

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

  1. public class TexasCityCollection : IEnumerable<string> {  
  2.     public IEnumerator<string> GetEnumerator() {  
  3.         yield return "Houston";  
  4.         yield return "Auston";  
  5.         yield return "Dallas";  
  6.         yield return "San Antonio";  
  7.     }  

#3: Partial 方法

C#:支持并限制分部方法

Java:不支持分部方法

Java不支持分部方法。在C#中,分部方法是允许的,但必须符合特定的限制:   

  • 分部方法方法名必须相同。  
  • 分部方法必须返回void。  
  • 分部方法默认是“private”,而且不接受任何修饰符。

#4: Extension 方法

C#:支持扩展方法

Java:不支持扩展方法

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

#5: Conditional 条件编译

C#:支持条件编译

Java:有限的支持条件编译

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

原文链接:http://www.oschina.net/question/157182_56839

责任编辑:林师授 来源: OSCHINA
相关推荐

2009-08-20 17:30:02

C#连接字符串

2009-08-12 14:59:09

C#和Java不同点

2010-09-02 10:15:46

SQL删除

2023-01-03 07:49:45

Java随机数线程

2010-02-23 14:24:50

WCF状态保存

2020-04-20 14:30:54

UbuntuLinux内核

2020-04-24 16:09:57

UbuntuLinux内核

2010-02-04 15:41:10

C++内存管理

2009-08-20 10:39:00

Java与C#的不同之

2020-04-21 17:04:12

JavaScriptHTTP请求开发

2010-02-04 10:13:35

C++获得系统时间

2021-12-25 23:17:52

Windows 11Windows微软

2010-01-18 11:05:24

C++

2010-02-05 10:30:02

C++操作符重载

2015-07-08 16:07:19

iOSObjective-C

2019-09-26 08:07:06

RHEL8命令Linux

2012-12-13 10:32:34

路由器线路输出

2010-08-24 09:00:43

JavaC#

2009-08-21 10:28:21

C#异步方法C#同步方法

2010-01-20 09:34:26

List<T>
点赞
收藏

51CTO技术栈公众号