F#非平凡的非主要构造函数

时间:2010-12-17 01:38:04

标签: f#

我想在调用主构造函数之前在非主构造函数中做一些工作,例如像这样的东西:

type Foo(a:int,b:int) =
    let a = a
    let b = b
    new(s:string) =
        //...work here (intermediate let bindings)
        let _a = ...
        let _b = ...
        Foo(_a,_b)

如果可能,我怎么能实现这一点(现在我想到了,我甚至不确定这是否可以在C#中完成,但目标类似于如何在任何你喜欢的地方调用基础构造函数扩展类构造函数...但我不想做任何事情,所以草图,只是在推迟到主要构造函数之前稍微处理我的参数 - 或者我今天一直在看电脑屏幕太多了吗?

1 个答案:

答案 0 :(得分:3)

我不知道你做了什么,但这对我有用:

type Foo(a:int,b:int) =
    let a = a
    let b = b
    new (s:string) =
        printfn "some side effect"
        let _a = s.Length
        let _b = 1
        Foo(_a,_b)

另外,如果你想在派生类型中调用基本构造函数并在插入代码之前或之后调用,这里的语法为FYI(小心大括号放置):

type DFoo =
    inherit Foo

    new (a,b) =
        printfn "perform some validation here"
        let c = 0 // or bind stuff
        {
            inherit Foo(a,b)
        }
    new (s:string) =
        {
            inherit Foo(s)
        }
        then if s.Length = 0 then printfn "post ctor side effect"