C# · 12月 26, 2021

c# – 使用“this”关键字时,系统如何知道使用什么?

使用“this”关键字时,系统如何知道使用什么?

最近我在接受采访时被问到这个问题.从来没有想到这一点,我回答说,系统会知道当前的控制流程的上下文,并决定使用这个对象来代替.面试官不高兴,他接下来的问题.

任何人都可以告诉我面试官可能想问什么,什么是答案?
(我认为这可以以不同的方式解释,因此保持为维基,除非有人指出不是..)

解决方法 this关键字是指向当前对象的指针.类的所有非静态成员函数都可以访问此指针.

指向当前对象的指针通常由编译器在非静态成员函数中通过使用寄存器(通常为ECX)使其可用.因此,当您在非静态成员函数中编写该编译器时,编译器将将该调用转换为从ECX加载地址.

检查这个简单的例子:

A t;t.test();004114DE lea ecx,[t] 004114E1 call std::operator > (41125Dh)

在调用非静态成员函数test()之前,编译器将使用[t](变量t的地址将在测试方法内)加载寄存器ECX.

004114DE lea ecx,[t]

并且在函数内部可以使用ecx获取当前对象实例的地址.