【问题标题】:This keyword not able to access object field此关键字无法访问对象字段
【发布时间】:2021-05-29 06:30:26
【问题描述】:
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' 是否以不同的方式获取对象的地址?

【问题讨论】:

  • Java 怎么样?
  • Java 和 C# 共享几乎相似的语法。此外,这个问题是关于“this”关键字的。当我在 java 中编写代码时遇到了类似的错误,但无法在此处编写两种语言的代码。
  • 在实例方法或构造函数中,this 是对当前对象的引用——调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。我在甲骨文上找到了这个。似乎'this'关键字只能在实例方法或构造函数中使用时才能访问对象。
  • 嗯,很多语言都有相似的语法/特性/行为,但你不需要标记所有的。

标签: c# this


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    在类正文中

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

    在主方法中

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

    这里this指的是s

    【讨论】:

    • 为什么'this'不能在main方法中工作那么,如果我们可以使用引用变量来访问main()中的对象,'this'不应该也能做到所以呢?
    • this 是类的非静态方法的隐式参数。它不能在静态方法中使用。
    • public void printSchool(School this) { // 非静态方法的隐式参数。 System.out.println(this.a) } 这在静态方法中没有意义。
    • 现在这是 Java。这就是为什么如果你想要一个 Java 答案,你只标记它 Java。
    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 2016-01-08
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    相关资源
    最近更新 更多