假设:
在外部程序集中定义了行和单元格类型。
问题:
我为行类型创建了一个扩展方法:
module XlRow =
type Row with
member this.xlNewCell (row : Row) =
let cell = Cell()
//Manipulate cell...
cell
此编译没有问题,并且报告具有预期的签名
row:Row -> Cell
但是,当我尝试调用这样的方法时,
let row = Row()
let cell = row.xlNewCell()
编译器报告错误“类型'单元'与类型'Row'不兼容。另一方面,以下语法成功并在执行时生成预期的新Cell:
let row = Row()
let cell = row.xlNewCell(row)
就好像编译器没有看到与扩展方法一起出现的“隐式this指针”;但它似乎被认为是某种“扩展方法”,因为我可以用'。'来称呼它。符号。这是怎么回事?
答案 0 :(得分:4)
F#扩展方法与C#扩展方法的工作方式不同。在声明方法时,您不需要传递this
参数,它由this.
表示法完成:
type Row with
member this.xlNewCell() =
// ...