用私有构造函数继承一个类?或者创建一个新模块?

ca9*_*3d9 1 f# f#-data

我正在使用Http类型的FSharpData.

type Http private() = 
    ......
    static member Request(url, ?query, ?headers, ?meth, ?body, ?cookies, ?cookieContainer, ?certificate) =
    ......
Run Code Online (Sandbox Code Playgroud)

但是,我需要扩展静态memeber Request来处理cookie.我不能继承该类,因为它的构造函数是私有的.

type Web () =
    inherit Http() // Error
    override Request
        let ObSSOCookie = new Cookie()
        ......
Run Code Online (Sandbox Code Playgroud)

或者我必须创建一个具有调用静态成员函数的函数的模块?该模块可以具有相同的名称Http吗?

Gus*_*rra 5

Http类型是一个静态类,因为它是无状态的,所以它没有任何意义,从它继承.如果您想使用cookie并在请求中维护它们,您可以创建一个CookieContainer并在请求中重复使用它:

let cc = CookieContainer()
Http.RequestString("url1", cookieContainer = cc)
Http.RequestString("url2", cookieContainer = cc)
Run Code Online (Sandbox Code Playgroud)

如果你真的想,你可以像这样为它创建一个包装器:

type HttpWithState() = 
    let cookies = CookieContainer()

    static member RequestString(url, ?params, ?headers, ...) =
        Http.RequestString(url, ?params = params, ?headers = headers, ..., cookieContainer = cookies)
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

let http = HttpWithState()
http.RequestString("url1")
http.RequestString("url2")
Run Code Online (Sandbox Code Playgroud)

但是你不会Http直接使用这种类型获得那么多