.net 在F#中。是否可以重载抽象类型的构造函数?

.net 在F#中。是否可以重载抽象类型的构造函数?,.net,f#,functional-programming,constructor,.net,F#,Functional Programming,Constructor,如果是,请给出一个带有无参数和“parameterfull”构造函数的类型示例 这是您建议使用的方法还是F#提供了一些更实用的替代方法。如果是,你能举个例子吗?像这样 type MyType(x:int, s:string) = public new() = MyType(42,"forty-two") member this.X = x member this.S = s let foo = new MyType(1,"one") let bar = new MyTy

如果是,请给出一个带有无参数和“parameterfull”构造函数的类型示例

这是您建议使用的方法还是F#提供了一些更实用的替代方法。如果是,你能举个例子吗?

像这样

type MyType(x:int, s:string) =
    public new() = MyType(42,"forty-two")
    member this.X = x
    member this.S = s

let foo = new MyType(1,"one")
let bar = new MyType()
printfn "%d %s" foo.X foo.S    
printfn "%d %s" bar.X bar.S    
这是做这件事的典型方法。让“最有参数”的构造函数为隐式构造函数,其余的为“新”重载,定义为类中调用隐式构造函数的成员

编辑

Beta2中有一个关于抽象类的bug。在某些情况下,您可以使用隐式构造函数(la)上的默认参数来解决此问题

[<AbstractClass>]
type MyType(?cx:int, ?cs:string) =
    let x = defaultArg cx 42
    let s = defaultArg cs "forty-two"
    member this.X = x
    member this.S = s
    abstract member Foo : int -> int

type YourType(x,s) =
    inherit MyType(x,s)    
    override this.Foo z = z + 1

type TheirType() =
    inherit MyType()    
    override this.Foo z = z + 1

let foo = new YourType(1,"one")
let bar = new TheirType()
printfn "%d %s" foo.X foo.S    
printfn "%d %s" bar.X bar.S    
[]
类型MyType(?cx:int,?cs:string)=
设x=defaultArg cx 42
设s=defaultArg cs“四十二”
请记住这个。X=X
成员this.S=S
抽象成员Foo:int->int
键入您的类型(x,s)=
继承MyType(x,s)
覆盖这个。Foo z=z+1
键入他们的类型()=
继承MyType()
覆盖这个。Foo z=z+1
让foo=newyourtype(1,“一”)
let bar=new TheirType()
打印fn“%d%s”foo.X foo.s
打印fn“%d%s”条.X条.s

哇,你说得对,把它变成一个抽象类,它就不工作了。那是一只虫子;我已经存档了。谢谢你的提问!伟大的不太好,不过还是谢谢你的回答。同时,是否有一个解决办法来完成这一点?我的意思是,除了使类非抽象之外,没有我所知道的解决方法。当然,您可以只使用一个构造函数,然后在每个派生类中“复制默认值”。哦,如果其他构造函数只执行“默认值”,您可以使用我在上面的主要答案编辑中发布的解决方法。