gpt4 book ai didi

casting - 当存在不同的重载时强制向上转型

转载 作者:行者123 更新时间:2023-12-02 18:32:27 24 4
gpt4 key购买 nike

这根本不是关于 Windows 窗体的,它只是为了“背景”。

当我在 AddRange 上遇到错误时,我正在摆弄 Windows 窗体,因为 MenuStrip.Items 需要将 ToolStripMenuItem 转换为 >ToolStripItem

但我已经有一个用于 Form.ControlsAddRange ,在此之前不需要强制转换。

经过一些实验,我设法发现当 AddRange 存在多个重载时会发生错误,因此我尝试验证我的想法:

type Foo () = class end
type Bar () = inherit Foo ()

type FooCollection () = class end // not really necessary

type Test1 () =
member __.AddRange (col: FooCollection) = () // could be an int or anything instead
member __.AddRange (foos: Foo []) = ()

type Test2 () = member __.AddRange (foos: Foo []) = ()

let lst1, lst2 = Test1 (), Test2 ()
lst1.AddRange [|Bar ()|] // error: have to explicitely cast => [|Bar () :> Foo|]
lst2.AddRange [|Bar ()|] // works

问题很简单:为什么;从我的角度来看,这个调用并不含糊

最佳答案

阅读 14.4.3 F# spec 后(由 Gustavo 暗示,向他致敬)

The F# compiler determines whether to insert flexibility after explicit instantiation, but before any arguments are checked.

我知道,对于具有重载的方法,永远不会插入灵 active ,因为它需要参数检查才能选择。

关于casting - 当存在不同的重载时强制向上转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38244478/

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