Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net F中没有构造函数的类#_.net_F# - Fatal编程技术网

.net F中没有构造函数的类#

.net F中没有构造函数的类#,.net,f#,.net,F#,我不确定为什么F#似乎允许定义没有任何构造函数的类。我的意思是,实例化类的对象是不可能的。语言规范不应该将此视为非法行为吗 例如,我可以定义类 type myClass = class member this.x = 0 end myClass似乎具有 type myClass = member x: int 但是它不可实例化。当您创建一个没有构造函数的类(换句话说,一个无法实例化的类)时,您基本上是在创建一个静态类* 在C#中,您可以使用static

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

例如,我可以定义类

type myClass =
    class
        member this.x = 0
    end
myClass
似乎具有

type myClass =
    member x: int

但是它不可实例化。

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

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


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

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


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

您总是可以从它继承并将其用作接口。要定义在对象浏览器中表示为“静态类”的类,请编写
[]键入C=class end
。但是,即使在这种情况下,F#当前也允许您将实例成员添加到类中。。。