繁体   English   中英

F#中没有构造函数的类

[英]Classes without constructor in F#

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

例如,我可以定义类

type myClass =
    class
        member this.x = 0
    end

myClass似乎有类型

type myClass =
    member x: int

但它不可实现。

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

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

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

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

* 有点。 静态类的正确定义是无法实例化或继承的,只有静态方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM