Java与C#开发上的一些差异与转换方法(2)

Java和C#函数差异性与转换:

在Java中使用函数,不声明[不可重写],就可以直接[重写]。

在Java环境中,如果我们需要一个公有方法不能重写,需要声明这个函数为final(基本等价于C#的sealed修饰符,但sealed仅对类有效)。

假设A类有公有函数:

public void test(){}

则B类无需任何修饰,复写一次该函数,重写就会被完成。

public void test(){}

如果我们不希望A类中函数test被重置,则需要特别修饰test函数,比如下例:

public final void test(){}


而在C#函数中,特性与Java正好相反,不声明函数[可以重写],意味着对应一定[无法重写]。

在C#中,假设也有A类,想要完成如Java般操作,则必须先作如下设定:

public virtual void test(){}

而后需要重写的B类,再做如下修饰,才能完整重写过程(在C#里,假如我们需要一个公有方法可以重写,则必须声明为override。Java虽然有override的元数据注释,但可有可无……)。

public override void test(){}

而C#中不希望test被重置,则无需任何设定,直接如下即可:

public void test(){}


另外,virtual修饰符不能与static、abstract, private或者override修饰符同时使用(否则VS直接编译失败,根本无法走到运行)。

Java和C#全局常量差异性与转换:

有时我们需要一个数值永远固定为单一量,这是我们就需要一个全局常量。

在C#中,这点延续了标准C语系的做法,直接使用const关键字即可(不需要static描述,有此关键字就是全局使用),比如:

public const int type = 0;

这样,我们直接使用类名.type的方式,就可以在任何场合访问到这个常量值。

而在Java中使用,实现同样效果则比较麻烦,因为Java虽然有const关键字,却是保留值(只占位,无实际功能),而需要由final与static关键字结合使用,方可达到近似效果。比如:

public final static int type = 0;


这样,我们使用Java类名.type的方式,才可以在任何场合都访问到这个常量值。

另外在C#中,也可以使用下列方式来达到目的:

public readonly static int type = 0 ;


其实从本质上讲,上述C#表述才和Java的常量用法更贴近(const字段是编译时常量,而readonly字段可用于运行时常量,意味着初始化时有一次动态赋值的机会)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pfsfz.html