我有一個.Net庫,已經實現了.Item
方法,例如。在F#中添加額外的方法作爲類型擴展名。
namespace Library2
type A() =
member m.Item with get(a: string) = printfn "get a string"
member m.Item with get(a: int) = printfn "simple slice"
在使用這個庫中的代碼,我想補充的同名一個額外的方法(因此它是optional extensions
):
#r @"Library2.dll"
open Library2
type A with
member m.Item with get(a: bool) =
printfn "get a bool"
下面的示例中的最後一行不編譯:
let a = new A()
a.["good"]
a.[10]
a.[true]
的F# doc說:
擴展方法不能是虛擬或抽象方法。它們可以重載同名的其他方法,但編譯器在非模糊調用的情況下會給非擴展方法優先 。
這意味着我不能使用相同的類型簽名來擴展.ToString/.GetHashCode
,但在這裏我使用了不同類型的簽名。爲什麼新方法不能擴展?
我覺得奇怪的是,Intellisense顯示了所有三種重載。 – Daniel
是的。這使我困惑...... –