簡體   English   中英

F#類型如何轉移到C#?

[英]How do F# types transfer over to C#?

如果在F#中我有以下方法:

drawBox
drawSphere
paintImage

它們會被轉移到C#,完全一樣嗎?

如果是這種情況,那么它不會破壞C#中的命名約定,其中方法應該是PascalCase嗎?

或者我應該在F#中使用PascalCase來解決這個問題嗎?

您應該遵循F#組件設計指南

值得注意的部分是:

  • 對面向對象的代碼使用.NET命名和大寫約定,包括F#-facing庫。
  • 對F#模塊中的公共函數和值使用PascalCase或camelCase。 camelCase通常用於公共函數,設計用於不合格(例如invalidArg ),用於“標准集合函數”(例如List.map )。 在這兩種情況下,函數名稱的作用與語言中的關鍵字非常相似。

切片的另一種方法:

  • 成員類型應該始終是PascalCase,就像C#
  • 模塊中的let-bound實體可以是camelCase,但是這些東西通常不是你公開暴露在C#消耗的庫中的東西。

正如其他人已經指出的那樣,編譯成員的名稱與您在F#代碼中編寫的名稱完全相同。 通常,在聲明類時遵循標准C#命名約定是個好主意。 在聲明F#模塊時,您可以使用camelCase (特別是針對F#用戶的模塊)或PascalCase如果您想在C#中使用它們)。

此外,還有一個技巧可以使用(這在F#核心庫中用於List.map等實際編譯為List.Map )。 您可以使用CompiledName屬性在已編譯的版本中指定名稱:

module Bar = 
  [<CompiledName("Foo")>]
  let foo a = a + 1

使用統一的命名約定可能更好,但是如果你想為F#用戶保留一個漂亮的短名稱,為C#用戶保留標准的.NET名稱,這是一個有趣的選擇。

類型方法名稱在F#和C#中都是相同的。 如果你想在C#中使用PascalCase - 你應該在F#中使用這個命名約定,與camelCase相同。

命名約定適用於人類。 編譯器和運行時實際上並不關心每個變量名是否完全不可讀,它們仍然可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM