F#中没有构造函数的类

Shu*_*eng 6 .net f#

我不确定为什么F#似乎允许在没有任何构造函数的情况下定义类.我的意思是,实例化该类的对象是不可能的.语言规范不应该将此视为非法行为吗?

例如,我可以定义类

type myClass =
    class
        member this.x = 0
    end
Run Code Online (Sandbox Code Playgroud)

myClass 似乎有类型

type myClass =
    member x: int
Run Code Online (Sandbox Code Playgroud)

但它不可实现.

Mar*_*ann 9

根据我的经验,F#的面向对象特性有时不如C#表达的优雅.上述问题可以是一个例子; 另一个例子是自动实现的可变属性.

大多数人(包括我)似乎都不在乎,因为我们很少使用这些功能.F#的面向对象特性主要用于实现与其他.NET代码的互操作,因此虽然它们很有用,但它们并不是语言的重要组成部分.我的猜测是没有人想到实现编译器检查,因为它不会提供太多价值.一旦你尝试使用myClass,你就会注意到出了问题.


Wil*_*osa 3

当您创建一个没有构造函数的类(换句话说,一个无法实例化的类)时,您基本上是在创建一个静态类*。

在 C# 中,您可以使用static关键字来允许编译器检查您是否有实例成员。在 F# 中,您在编译时没有这样的检查。

* 有点。静态类的正确定义是不能实例化或继承并且仅具有静态方法的类。