gpt4 book ai didi

c# - 为什么 DynamicObject 类中的方法不是通用的?

转载 作者:行者123 更新时间:2023-11-30 14:02:46 25 4
gpt4 key购买 nike

我正在阅读 this关于C# 4.0 中的动态对象的文章。
在该示例中,函数 TryGetMember(GetMemberBinder binder, out object result) 的第二个参数是 Object 类型。我看了MSDN并注意到其他方法也将参数作为 Object 获取。为什么这些函数不是通用的?
来自 MSDN

In relation to simple assignments, boxing and unboxing are computationally expensive processes

如果装箱/拆箱很昂贵,使用泛型不是更好吗?

谢谢。

最佳答案

注意“与简单赋值相关”。换句话说,与最便宜的可能操作之一相比,装箱是昂贵的。

与涉及动态类型的其他机制相比,装箱是廉价的:)

如果 TryGetMember 是通用的,则意味着调用者 必须知道期望的类型。动态类型的要点之一是调用者不能保证会发生什么。如果我写:

dynamic foo = GetDynamicValueFromSomewhere();
Console.WriteLine(foo.SomeProperty);

这只会解决 Console.WriteLine 的哪个重载要在 SomeProperty 被评估后使用。它没有“预期的”返回类型...那么您希望使用哪种泛型类型参数?

请记住,大多数动态类型方案无论如何都会使用 object 作为 CLR 中的中间表达式类型。如果我写:

dynamic x = 10;

那是已经的拳击。您不能在 CLR 中表示“不确定类型的未装箱值类型”。 (它会分配多少空间?)

关于c# - 为什么 DynamicObject 类中的方法不是通用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5308939/

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