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字段可用于运行时常量,意味着初始化时有一次动态赋值的机会)。
Java与C#开发上的一些差异与转换方法(2)
内容版权声明:除非注明,否则皆为本站原创文章。