在C#中使用带有类名的“this”

时间:2017-09-05 08:16:11

标签: c# this

[编辑] 我想问的是只是使用this添加一个类名,所以它不是引用一个外部类成员。对不起我的不恰当的例子!

[编辑2] 有人报告这是重复但不是!正如我之前所说,我只是想知道是否可以像Java一样互换地引用MyClass.thisthis。这根本不是一个实际问题,只是为了学习C#语言本身。如果人们真的认为它是重复的,我不介意删除它,所以请告诉我。

在Java中,您可以将this与类名称一起使用:

class OuterClass {
    int outerMember = 1;

    class InnerClass {
        int innerMember = 2;

        public void printOuterMember() {
            System.out.println(OuterClass.this.outerMember);
            System.out.println(outerMember);
        }

        public void printInnerMember() {
            System.out.println(InnerClass.this.innerMember);
            System.out.println(this.innerMember);
            System.out.println(innerMember);
        }
    }
}

有时候不需要课程名称,但有时候会有所帮助。

所以我在C#中尝试了同样的事情,但似乎不可能。我是对的吗?

1 个答案:

答案 0 :(得分:7)

C#不支持这一点,在Java中,嵌套类捕获父对象引用。 C#嵌套类更像是Java中的静态嵌套类。如果要访问父类,则需要在嵌套类构造函数中传递对它的引用。

如果嵌套类具有对它的引用,则它们可以访问父类的私有字段,因此您可以获得类似的结果,只是访问父类实例不像Java中那样是自动的。所以这段代码可以运行

class Owner
{
    private int field;
    class Nested
    {
        public Nested(Owner owner) { this.owner = owner; }
        Owner owner;
        public int D()
        {
            return owner.field;
        }
    }
}