[英]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.