Non si tratta di moduli Windows, è solo per lo "sfondo".Upcast obbligatorio in caso di sovraccarico diverso
stavo giocherellando in giro Windows Form quando ho ottenuto un errore su un AddRange
per un MenuStrip.Items
che richiede di gettare ToolStripMenuItem
in ToolStripItem
Ma ho già un AddRange
per un Form.Controls
prima che non richiedeva calchi.
Dopo un po 'di sperimentazione sono riuscito a trovare che l'errore si verifica quando ci sono di sovraccarico multiplo per quel AddRange
Così ho cercato di convalidare il mio pensiero:
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
La questione è semplicemente perché; dal mio punto di vista la chiamata non è ambiguo
Per me la domanda è perché funziona in test2, se si rende il metodo statico smette di funzionare. – Gustavo
Test2 funziona per me con metodo statico (Test1 continua a non funzionare ovviamente) – Sehnsucht
Impossibile modificare il precedente qui è un esempio di [ideone] (http://ideone.com/KLGwRb) per il test statico – Sehnsucht