gpt4 book ai didi

c# - C# 4.0 中使用动态类型的重载解析

转载 作者:太空狗 更新时间:2023-10-29 21:37:16 24 4
gpt4 key购买 nike

我还没有访问 C# 4.0 预览版的权限。但我很好奇,在以下情况下调用重载方法时,C# 4.0 运行时会做什么。它解析为通用重载...还是专用重载。

public class Foo<T>
{
protected string BarImpl( T value ) { return "Bar(T) says: " + value.ToString(); }

protected string BarImpl( int value ) { return "Bar(int) says: " + value.ToString(); }

public string Bar( T value )
{
dynamic foo = this;
return foo.BarImpl( value );
}
}

public static void Main( string args[] )
{
var f = new Foo<int>();

Console.WriteLine( f.Bar( 0 ) );
}

最佳答案

一般来说,我的理解是结果应该(只要可能)与编译相同代码时的结果相同,只是动态表达式被替换为动态值在执行时具有。 (静态已知类型保留在调用站点信息中。)

在这种特殊情况下,只有您的代码使用 .NET 4.0b1,结果是:

Bar(int) says: 0

然而,再次查看这个(并检查哪个位实际上是动态的)我有点困惑。我认为在这种情况下,我必须非常仔细地查看规范以了解正确的行为是什么。遗憾的是,我不知道 C# 4.0 规范何时可用。

这是一个棘手的推理,我怀疑关键部分是在执行时绑定(bind)器是否能够计算出值是 T 类型对于相同的 T 作为接收者,而不是类型 int。因为在这种情况下接收器 是动态的,所以编译器根本不做任何重载解析。唔。肯定是棘手的。

关于c# - C# 4.0 中使用动态类型的重载解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/987176/

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