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