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”,会怎么样