gpt4 book ai didi

c# - CLR 如何解析涉及动态类型的方法?

转载 作者:行者123 更新时间:2023-11-30 18:01:39 26 4
gpt4 key购买 nike

给定,

方法重载 = 编译时分辨率。

方法覆盖 = 运行时解析。

CLR如何解析下面的方法调用(涉及动态类型)?

    dynamic intValue = -10;
var result = Math.Abs(intValue);

感谢您的关注。

最佳答案

将名称与其本身相关联的过程称为绑定(bind)。正常的重载决议是“早期”绑定(bind),因为方法名称的确切含义是在编译时早期确定的。

当编译器在重载决策期间遇到虚方法时,它会发出虚调用。在运行时,这会被路由到正确的方法,可能会被路由到覆盖。

当编译器遇到动态对象时,它会发出代码以执行“后期”绑定(bind),即在运行时。后期绑定(bind)就像运行时的​​重载解析。代码查看参数,找出它的整数,查找要调用的正确重载,然后调用它。

嗯,它实际上做的远不止于此。它缓存查找结果并进行测试,以便下次运行代码时,如果参数类型为 int,它可以直接调用正确的方法。

这仍然是一种简化。实际上,可以进行更多优化以获得最佳性能。

参见 this blog post更详尽地解释您的示例究竟会发生什么。

关于c# - CLR 如何解析涉及动态类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875657/

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