我正在研究this的用法,我想至少部分地了解它,例如何时解决歧义并从“当前”类调用方法,但我正在阅读的书中有一个例子(首先C#)让我很难受:

public void SpeakTo(Elephant whoToTalkTo, string message) {
    whoToTalkTo.TellMe(message, this);
}


在这种方法中,可以肯定地说this具有始终引用任何调用方法SpeakTo()的对象的功能,而不管调用被写入哪个类?

最佳答案

在此方法中,可以肯定地说“ this”具有始终引用调用该方法“ SpeakTo()”的任何对象的功能,而不管调用是在哪个类中编写的?


不。 this不引用调用SpeakTo的对象。它指的是在其上调用SpeakTo的对象。

我将使用一些代码来阐明这一点

class Foo {
    public static void Main(String[] args) {
        var foo = new Foo();
        foo.MyMethod();
    }

    public void MyMethod() {
         var bar = new Bar();
         bar.SpeakTo(anElephant, "Hello");
     }
}

class Bar {
    public void SpeakTo(Elephant whoToTalkTo, string message) {
       whoToTalkTo.TellMe(message, this);
    }
}


根据您的陈述,this引用在main方法中创建的foo变量。不是这种情况。 this实际上是指bar。即方法名称之前的对象。

10-07 19:39
查看更多