C# "的用途;这";关键词

C# "的用途;这";关键词,c#,this,C#,This,我正在研究这个的用法,我想我至少部分理解了它,比如什么时候解决歧义,什么时候从“当前”类调用方法,但是我正在读的书中的一个例子(Head-First C#)让我很难理解: public void SpeakTo(Elephant whoToTalkTo, string message) { whoToTalkTo.TellMe(message, this); } 在这个方法中,是否可以安全地说,this的函数总是引用调用该方法的任何对象SpeakTo(),而不管调用写在哪个类中?否。。

我正在研究
这个
的用法,我想我至少部分理解了它,比如什么时候解决歧义,什么时候从“当前”类调用方法,但是我正在读的书中的一个例子(Head-First C#)让我很难理解:

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

在这个方法中,是否可以安全地说,
this
的函数总是引用调用该方法的任何对象
SpeakTo()
,而不管调用写在哪个类中?

否。。。实际上,
这个
在您的上下文中指的是定义了
SpeakTo
的对象,而不是调用它的对象

让我们这样说:

  • 对象
    speaker
    属于定义
    SpeakTo
    方法,
  • 对象
    调用方
    正在调用
    演讲者.SpeakTo()
    ,并且
  • 对象
    whottotalkto
    属于定义
    TellMe(字符串、扬声器)
正如您所看到的,
whottotalkto
需要
Speaker
类实例。然后,
speaker
对象就是这个对象,它可以自由地传递
这个
作为参数

现在我们可以构建一个更大的示例,其中这些关系变得更加明显:

class Speaker
{
    public int Data { get; set; }

    public void SpeakTo(Elephant whoToTalkTo, string message) 
    {
        // Passing current instance of this class as the argument
        whoToTalkTo.TellMe(message, this);
    }
}
这个
Speaker
类包含一段状态。现在我将使用
whottotalkto
对象来更改该状态:

class Talker
{
    public void TellMe(string message, Speaker speaker)
    {
        speaker.Data = message.Length;
    }
}
此实现正在更改传递给它的一个特定对象的状态

现在,最终的调用者来到了图片,它实际选择了
演讲者
对象,该对象将接受
TellMe()
方法:

class Caller
{
    public void DoWork()
    {
        Talker talker = new Talker();

        Speaker one = new Speaker();
        Speaker two = new Speaker();

        // This sets one.Data to length of "something"
        one.SpeakTo(talker, "something");

        // This sets two.Data to length of "else"
        two.SpeakTo(talker, "else");

        Console.WriteLine(one.Data);
        Console.WriteLine(two.Data);
    }
}

此代码将打印值9和4,这表明
whoToTalkTo
实际上正在修改两个不同对象的状态。

否。。。实际上,
这个
在您的上下文中指的是定义了
SpeakTo
的对象,而不是调用它的对象

让我们这样说:

  • 对象
    speaker
    属于定义
    SpeakTo
    方法,
  • 对象
    调用方
    正在调用
    演讲者.SpeakTo()
    ,并且
  • 对象
    whottotalkto
    属于定义
    TellMe(字符串、扬声器)
正如您所看到的,
whottotalkto
需要
Speaker
类实例。然后,
speaker
对象就是这个对象,它可以自由地传递
这个
作为参数

现在我们可以构建一个更大的示例,其中这些关系变得更加明显:

class Speaker
{
    public int Data { get; set; }

    public void SpeakTo(Elephant whoToTalkTo, string message) 
    {
        // Passing current instance of this class as the argument
        whoToTalkTo.TellMe(message, this);
    }
}
这个
Speaker
类包含一段状态。现在我将使用
whottotalkto
对象来更改该状态:

class Talker
{
    public void TellMe(string message, Speaker speaker)
    {
        speaker.Data = message.Length;
    }
}
此实现正在更改传递给它的一个特定对象的状态

现在,最终的调用者来到了图片,它实际选择了
演讲者
对象,该对象将接受
TellMe()
方法:

class Caller
{
    public void DoWork()
    {
        Talker talker = new Talker();

        Speaker one = new Speaker();
        Speaker two = new Speaker();

        // This sets one.Data to length of "something"
        one.SpeakTo(talker, "something");

        // This sets two.Data to length of "else"
        two.SpeakTo(talker, "else");

        Console.WriteLine(one.Data);
        Console.WriteLine(two.Data);
    }
}

此代码将打印值9和4,这表示
whotottalkto
实际上正在修改两个不同对象的状态。

指的是类的当前对象,该对象具有方法
SpeakTo

考虑以下示例:

public class A
{
      public void SpeakTo(Elephant whoToTalkTo, string message) {
          whoToTalkTo.TellMe(message, this);
       }
}
现在,如果实例化
A
的对象并调用方法
SpeakTo
,它将如下所示:

A obj = new A();
obj.SpeakTo();

在方法
SpeakTo
中,
引用当前对象,即
obj

方法
TellMe
的签名应如下所示:

public void TellMe(string message, A objOfA)

引用类的当前对象,该对象具有方法
SpeakTo

考虑以下示例:

public class A
{
      public void SpeakTo(Elephant whoToTalkTo, string message) {
          whoToTalkTo.TellMe(message, this);
       }
}
现在,如果实例化
A
的对象并调用方法
SpeakTo
,它将如下所示:

A obj = new A();
obj.SpeakTo();

在方法
SpeakTo
中,
引用当前对象,即
obj

方法
TellMe
的签名应如下所示:

public void TellMe(string message, A objOfA)
在这个方法中,是否可以安全地说“this”具有始终引用调用方法“SpeakTo()”的任何对象的函数,而不管调用是在哪个类中编写的

没有
不引用调用
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
变量。事实并非如此<代码>此实际上指的是
。i、 e.方法名称之前的对象

在这个方法中,是否可以安全地说“this”具有始终引用调用方法“SpeakTo()”的任何对象的函数,而不管调用是在哪个类中编写的

没有
不引用调用
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
变量。事实并非如此<代码>此实际上指的是
。i、 e.方法名称前面的对象。

指的是对象本身。例如:
myFoo.speakTo(…)
将具有
等于
myFoo
此引用对象本身。例如:
myFoo.speakTo(…)
将具有
等于
myFoo
示例中的对象“speaker”是来自类speaker的参考变量。如果我在写这个的同一个类中有来自类Speaker的多个引用变量,比如object“talke”,会怎么样