gpt4 book ai didi

c# - 为什么.NET Framework 中的某些委托(delegate)实例的命名带有后缀thunk?

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:39 26 4
gpt4 key购买 nike

我一直在浏览 ASP.NET MVC 源代码,我注意到在很多地方,有 Func<T> 类型的函数参数。以后缀 thunk 命名的。我一直在思考为什么会这样?

据我所知,在早期,我确实遇到过thunk 一词,并将其理解为“从一种 CPU 架构到另一种架构的端口”。因此,如果您有一个 16 位 DLL,并且想在 32 位环境中使用它,则必须创建一个 thunk 以在两个平台之间编码所有这些整数和 double 。

但命名这些 Funcs 背后的动机是什么?有这样的名字?例如这是一种这样的方法。

System.Web.Mvc.FormCollection 的 Actor 类。

internal FormCollection(ControllerBase controller, 
Func<NameValueCollection> validatedValuesThunk,
Func<NameValueCollection> unvalidatedValuesThunk)
{
base.Add(((controller == null)
||
controller.ValidateRequest)
?
validatedValuesThunk()
:
unvalidatedValuesThunk());
}

还有一个例子。这是 ControllerActionInvoker 中的私有(private)字段类。

private Func<ControllerContext, ActionDescriptor, 
IEnumerable<Filter>> _getFiltersThunk;

MVC 代码中有大量此类方法。

最佳答案

来自 wikipedia :

In computer programming, a thunk is a subroutine that is created, often automatically, to assist a call to another subroutine. Thunks are primarily used to represent an additional calculation that a subroutine needs to execute, or to call a routine that does not support the usual calling mechanism.

FormCollection 方法中使用“thunk”似乎符合这个定义。

关于c# - 为什么.NET Framework 中的某些委托(delegate)实例的命名带有后缀thunk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28758186/

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