如何在通用约束类型上调用静态方法

use*_*177 3 f#

给出这个例子:

type Base() =
    static member Function() = ""

type Derived() =
    inherit Base()

let get<'T when 'T :> Base> segment =
    return ('T).Function()

let invoked = get<Derived>()
Run Code Online (Sandbox Code Playgroud)

有没有办法来调用Functionget

Sze*_*zer 6

SRTP可以帮助您:

type Base() =
    static member Function() = ""

type Derived() =
    inherit Base()

let inline get< ^T 
        when ^T :> Base
        and  ^T : (static member Function: unit -> string)> =
     (^T : (static member Function: unit -> string) ())

let invoked1 = get<Derived>  //ok
let invoked2 = get<string>   //error: string not derived from Base
Run Code Online (Sandbox Code Playgroud)