F#中的扩展方法定义/调用

时间:2013-12-21 17:46:47

标签: f# extension-methods

假设:

在外部程序集中定义了单元格类型。

问题:

我为类型创建了一个扩展方法:

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指针”;但它似乎被认为是某种“扩展方法”,因为我可以用'。'来称呼它。符号。这是怎么回事?

1 个答案:

答案 0 :(得分:4)

F#扩展方法与C#扩展方法的工作方式不同。在声明方法时,您不需要传递this参数,它由this.表示法完成:

type Row with
    member this.xlNewCell() =
        // ...