作者:jb51 来源:脚本之家 时间:2019-09-10 10:23:12 我要评论

Java 的设计者是因为讨厌C++的复杂,于是Java 非常简洁,GC 也让内存管理非常方便,C# 是看中了Java 的GC,和虚拟机技术,希望把微软的几大语言集成到.NET 上来。 因此C#从语言上来讲并不简单甚至可以算的上复杂。

两种语言的设计思路也不一样,Java 是编译解释语言,C#是编译然后编译运行语言。Java 没有委托,C# 有委托。Java 倾向于用Interface 实现委托的功能,而 在C# 中,Abstract Class 比Interface 发挥了更大功能。

Java 遵循camel 命名规则,C#遵循Pascal 命名规则。但是如今越来越多的Java 人开始使用C#, 同时也把camel 命名规则带到了C#,这可能会让C#代码越来越难读。为什么当初C#为什么不遵循camel 呢? 我看不出camel 命名规则有什么不好的。

一. 类名.this 与内部类

在 java 中,经常看到类似类名.this 的用法,this 就是当前对象实例,为什么前面会出现类名呢?对此 C# 程序员会很纳闷。

在 Java 中,很多地方使用到了内部类,甚至可以在在内部类中访问外部类中的成员,这个时候,在内部类中使用 this 的时候,就会出现 this 到底是谁的问题,到底是表示内部类的当前对象实例,还是外部类的当前对象实例问题。

在 Java 中,通过在 this 的前面加上外部类的类名,表示在内部类中使用外部类的当前对象实例。

我们看下面的一个例子。

复制代码 代码如下:

package core.sisheng;

// 外部类定义
public class OuterClass {

    // 内部类定义
    private class InnerClass
    {
        // 内部类中没有定义 id 成员,这里访问外部类中的成员
        public int getId(){    return OuterClass.this.id;    }
        public void setId(int id) { OuterClass.this.id = id;}

        // 内部类中定义了 name 成员,直接访问内部类中的成员, 默认 this 访问当前类中的成员
        private String name;
        public String getName() { return this.name;}
        // 可以在 this 的前面加上一个内部类的名称
        public void setName(String name) { InnerClass.this.name = name;}

        // 内部类中也可以访问外部类中同名的成员,需要加上外部类的名称
        public String getOuterName() { return OuterClass.this.name;}
        public void setOuterName(String name) { OuterClass.this.name = name;}

        @Override
        public String toString()
        {
            return "Id: " + this.getId() + ", Inner Name: " + this.getName() + ", Outer Name: " + this.getOuterName();
        }
    }

    // 外部类中定义的成员 id 和 name
    private int id;
    private String name;

    private InnerClass innerInstance;
    public OuterClass()
    {
        this.innerInstance = new InnerClass();
        this.innerInstance.setId(20);
        this.innerInstance.setName("Tom");
        this.innerInstance.setOuterName("Alice");
    }

    public String toString()
    {
        return this.innerInstance.toString();
    }   
}

19阅读 | 0评论
你的回应
写文章

联系我们