[编辑] 我想问的是只是使用this
添加一个类名,所以它不是引用一个外部类成员。对不起我的不恰当的例子!
[编辑2] 有人报告这是重复但不是!正如我之前所说,我只是想知道是否可以像Java一样互换地引用MyClass.this
和this
。这根本不是一个实际问题,只是为了学习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#中尝试了同样的事情,但似乎不可能。我是对的吗?
答案 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;
}
}
}