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

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方法(当然,不照规矩走也没人拦着),可以不成对出现。

比如


      private String name;

        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在运行机制上倒没有本质区别。

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

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