此关键字无法访问对象字段

This keyword not able to access object field

提问人:Lucifer G 提问时间:5/29/2021 最后编辑:Mark RotteveelLucifer G 更新时间:5/29/2021 访问量:393

问:

class school
{
    int a;

    public static void main(string[] args)
    {
        school obj = new school();
        Console.WriteLine(obj.a);
        Console.WriteLine(this.a);
    }
}

尽管我们不能从静态方法访问实例变量,但在这里我们通过使用引用变量“obj”并访问实例变量来做到这一点。但是,当我们使用“this”关键字时,它会显示一个错误,即“this”不能用于访问静态方法中的实例变量。 obj 包含对象的地址,因此它能够访问。即使“this”指向实例变量,但它仍然无法访问。“this”是否以不同的方式获取对象的地址?

C# 这个

评论

2赞 code 5/29/2021
这是怎么回事?
0赞 Lucifer G 5/29/2021
Java 和 C# 的语法几乎相似。另外,这个问题是关于“这个”关键词的。当我用 java 编写代码时,我遇到了类似的错误,但无法在这里为这两种语言编写代码。
0赞 Lucifer G 5/29/2021
在实例方法或构造函数中,这是对当前对象的引用,该对象是调用其方法或构造函数的对象。您可以使用它从实例方法或构造函数中引用当前对象的任何成员。我在 Oracle 上找到了这个。似乎“this”关键字只有在实例方法或构造函数中使用对象时才能访问该对象。
0赞 code 5/29/2021
嗯,很多语言都有类似的语法/功能/行为,但你不需要标记所有它们。
1赞 Progman 5/29/2021
这回答了你的问题吗?为什么不能在 .Net 的静态方法中使用关键字“this”?

答:

1赞 Mirek Pluta 5/29/2021 #1

this关键字只能在类的非静态方法中使用

1赞 mohamad liaghat 5/29/2021 #2

this只适用于实例方法并引用当前对象。

在类正文中

public void printSchool() {
   System.out.println(this.a)
}

在 main 方法中

School s = new School();
s.printSchool();

这里指的是thiss

评论

0赞 Lucifer G 5/29/2021
为什么“this”在 main 方法中不起作用,那么,如果我们可以使用引用变量来访问 main() 中的对象,那么“this”不应该也可以这样做吗?
1赞 mohamad liaghat 5/29/2021
this是类的非静态方法的隐式参数。它不能在静态方法中使用。
0赞 mohamad liaghat 5/29/2021
public void printSchool(School this) { // 非静态方法的隐式参数。System.out.println(this.a) } 在静态方法中没有表示。
0赞 code 5/29/2021
好了,现在这是 Java。这就是为什么你只在想要一个 Java 答案时才将其标记为 Java。