5個(gè)C#和Java之間的不同方法
C#和Java之間最大的區(qū)別之一,是如何處理的方法。在這兩種語言,方法是功能代碼的基石:他們定義變量,并指定對這些變量進(jìn)行操作,返回值給其他方法使用。盡管Java語言的創(chuàng)建者遵循了許多基于C語言的概念,他們研發(fā)的方法允許更少的限制和增加更多的靈活性。
#1: Virtual 方法
C#:方法默認(rèn)是非虛方法
Java:方法默認(rèn)是虛方法
虛方法允許任何類繼承,并重寫其方法。在Java中,所有方法默認(rèn)是虛方法。此默認(rèn)設(shè)置防止插入的一個(gè)與繼承類同名的不相關(guān)的方法。
在C#中,開發(fā)人員必須明確指定帶“virtual”關(guān)鍵字的虛方法:
- 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”關(guān)鍵字:
- 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方法允許開發(fā)人員控制如何循環(huán)處理每一次迭代。而不是創(chuàng)建一個(gè)組,generator方法返回每次迭代后的值作為循環(huán)過程的代碼。Java沒有內(nèi)置處理generator方法的功能,假設(shè)在Java中有這些功能代碼,往往也是龐大而復(fù)雜的。C#使用“IEnumerable”接口創(chuàng)建generator函數(shù)和“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?! ?/li>
- 分部方法默認(rèn)是“private”,而且不接受任何修飾符。
#4: Extension 方法
C#:支持?jǐn)U展方法
Java:不支持?jǐn)U展方法
擴(kuò)展方法允許開發(fā)人員包括他們當(dāng)前類型的方法,而不需要?jiǎng)?chuàng)建一個(gè)新類型或者修改現(xiàn)有的類型。當(dāng)前的Java語言不支持?jǐn)U展方法,但是其特性會考慮放在將來的版本中。
#5: Conditional 條件編譯
C#:支持條件編譯
Java:有限的支持條件編譯
C#編譯器允許條件編譯:開發(fā)者可以輸入?yún)?shù)來確定項(xiàng)目編譯哪些方法來使用。Java也允許條件編譯,但這種做法通常是在調(diào)試過程中使用。