没有参数列表的类定义

时间:2014-04-30 18:21:21

标签: f#

F#接受以下内容:

type Abc =
    member this.A = 10

由于未提供参数列表,因此没有默认构造函数。可以将构造函数添加到Abc吗?如果没有,Abc可以做些什么?

1 个答案:

答案 0 :(得分:5)

我想不出很多用途,但你可以做的两件事是

  1. 继承它,虽然派生类型也不能是可实例化的
  2. 使用静态成员扩展它(尽管使用模块可以更好地实现,也可以扩展)
  3. type Abc =
        member this.A = 10
    
    [<Class>]
    type Def = 
        inherit Abc
    
    type Abc with
        static member Foo() = ()
    

    在C#中,接口或抽象类的代码合约在“合同类”中定义,该合同类必须标记为抽象并具有私有构造函数(即,它是不可实例化的)。在我看来,这是实现这一目标的更好方法。但是C#不支持无构造函数的类。