簡體   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