gpt4 book ai didi

c# - 当使用 'this'关键字时系统如何知道使用什么?

转载 作者:行者123 更新时间:2023-12-02 01:38:10 25 4
gpt4 key购买 nike

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

最近,我在一次采访中被问到这个问题。我从来没有考虑过这一点,我回复说系统会知道控制流所在的当前上下文,并决定使用哪个对象来代替 this。面试官看起来不太高兴,他继续下一个问题。

谁能告诉我面试官可能想问什么以及答案是什么?(我认为这可以用不同的方式解释,因此将其保留为维基,除非有人指出不要......)

最佳答案

虽然指出“this”引用本质上作为神奇的“隐藏参数”传递给调用的答案本质上是正确的,但整个故事在 C# 中实际上比人们一开始想象的要复杂得多一眼。

引用类型很简单;检查引用的对象是否为 null,然后从概念上将其作为名为“this”的未命名、非变量参数传递。这个故事因值类型而变得复杂。

请记住,根据定义,值类型是按值传递的,即通过制作数据副本来传递。因此他们的名字。但显然可变的值类型——这是纯粹的邪恶,应该避免——不能通过值作为“this”传递,因为如果你调用一个变体,变体方法中的“this”将改变副本,而不是改变副本。原本的!

因此,在值类型的方法调用中,“this”不是接收者的,而是代表接收者存储位置的变量的别名>。我们通过将“this”作为接收者的托管地址而不是接收者的传递来实现这一点。

现在我们可以提出另一个困难。如果存储要改变的值的变量是只读变量怎么办?现在我们该怎么办?如果您好奇,请阅读我关于该主题的文章,看看您是否能正确回答所提出的难题:

http://blogs.msdn.com/ericlippert/archive/2008/05/14/mutating-readonly-structs.aspx

关于c# - 当使用 'this'关键字时系统如何知道使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com