فرض کنید که یک interface (با نام IPrintable) و یک class (با نام CanonPrinter) که آن را implements کرده به صورت زیر تعریف شده است:
type IPrintable =
abstract member Print : unit -> unit
type CanonPrinter(x: int, y: float) =
interface IPrintable with
member this.Print() = printfn "%d %f" x y
اگر بخواهیم یک شی از کلاس CanonPrinter ساخته و متدی را call کنیم که در IPrinter تعریف شده است (در اینجا متد Print)، باید در موقع فراخوانی، آن شی را به IPrinter به اصطلاح UpCast کنیم:
let printer= new CanonPrinter(1, 2.0)
(printer:> IPrintable).Print()
یه راه دیگه هست که باعث میشه موقع هر فراخوانی لازم نباشه که cast کنیم:
type CanonPrinter(x: int, y: float) =
member this.Print() = (this :> IPrintable).Print()
interface IPrintable with
member this.Print() = printfn "%d %f" x y
let printer = new CanonPrinter(1, 2.0)
printer.Print()