我有一个已经实现.Item
方法的 .Net 库,例如
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# 文档说:
扩展方法不能是虚拟或抽象方法。它们可以重载其他同名方法,但在调用不明确的情况下,编译器会优先使用非扩展方法。
这意味着我不能.ToString/.GetHashCode
使用相同的类型签名进行扩展,但在这里我使用了不同的类型签名。为什么不能扩展新方法?