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

标签 .net f# functional-programming constructor

如果是,您能否举一个具有无参数和“全参数”构造函数的类型的示例。

这是您推荐使用的东西,还是 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    

这是典型的做法。将“最有参数”的构造函数作为隐式构造函数,并将其余的"new"重载定义为类中调用隐式构造函数的成员。

编辑

Beta2 中有一个关于抽象类的错误。在某些情况下,您可以使用隐式构造函数的默认参数来解决它,一个 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    

关于.net - 在 F# 中。是否可以重载抽象类型的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689424/

相关文章:

f# - 嵌套函数性能 (F#)

c# - 通过遍历数组创建 KeyValuePair 列表

python - 在 Azure 数据工厂上运行 .Net 和 Python 应用程序?

f# - 如何使用重载的静态运算符

java - java并发编程中的 'mutable variable'这个词和函数式编程中的含义一样吗?

functional-programming - Racket - 构建内置成员函数

haskell - 将函数组合成另一个函数

c# - 属性 getter 和具有一个参数的方法之间怎么会存在歧义呢?

c# - 如何在.Net 中让不同类型的消费者使用 RabbitMq 消息?

haskell - 解析器组合器可以变得高效吗?