Java和C#继承的差异性与转换:
在名称上,C#与Java相同,都是类为class(但获得当前类的class时,却不能如Java般getClass,而要GetType) , 接口为interface,抽象为abstract。
但Java继承类需要修饰符【extends】,实现接口需要修饰符【implements】。
比如:
public class Test extends A implements B {
}
而C#仅需一个【:】搞定。
public class Test : A , B {
}
编译时系统会分清那个是继承,那个是接口或其他类型(struct啥的不能被继承)。
另外,想要阻止某个类被派生时,Java中可以使用final关键字,C#中可以使用sealed关键词来修饰目标类。
不过C#中也有一个不如Java的特性,让小弟非常别扭,那就是interface中不能存在常量(不能包含域(Field),且函数前也不能存在public关键字),导致将Java的某些代码移向C#只能微调。
Java和C#属性的差异性与转换:
在Java中定义和访问属性,在规范上要用get和set方法(当然,不照规矩走也没人拦着),可以不成对出现。
比如
public void setName(string n){
this.name = n;
}
public string getName(){
return this.name;
}
而在C#中,则可以直接用如下方式来访问name。
public string name
{
set;
get;
}
此外,Java中我们也可以直接将name设定为public的,这样表面功能上同上述C#语法仿佛没有区别。但是,在C#中我们却可以自由限制该方法的set和get属性,以调控究竟暴露给用户怎样的操作权限,要比Java中批量生成海量Set与Get方便一些。
附带一提,如果我们调用C#的Type中GetMethods方法遍历函数,可以看见name将变成如下样式。
set_name
get_name
其实C#就是替我们自动添加好了set与get属性,与Java在运行机制上倒没有本质区别。