F#类型如何转移到C#?

Joa*_*nge 5 c# f# naming-conventions

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

drawBox
drawSphere
paintImage
Run Code Online (Sandbox Code Playgroud)

它们会被转移到C#,完全一样吗?

如果是这种情况,那么它不会破坏C#中的命名约定,其中方法应该是PascalCase吗?

或者我应该在F#中使用PascalCase来解决这个问题吗?

Bri*_*ian 8

您应该遵循F#组件设计指南.

值得注意的部分是:

  • 对面向对象的代码使用.NET命名和大写约定,包括F#-facing库.
  • 对F#模块中的公共函数和值使用PascalCase或camelCase.camelCase通常用于公共功能,设计用于不合格(例如invalidArg),以及"标准收集功能"(例如List.map).在这两种情况下,函数名称的作用与语言中的关键字非常相似.

切片的另一种方法:

  • 成员类型应该始终是PascalCase,就像C#
  • 模块中的let-bound实体可以是camelCase,但这些东西通常不是你公开暴露在C#消耗的库中的东西.


Tom*_*cek 5

正如其他人已经指出的那样,编译成员的名称与您在F#代码中编写的名称完全相同.通常,在声明类时遵循标准C#命名约定是个好主意.声明F#模块时,您可以使用camelCase(特别是针对F#用户的模块),或者PascalCase如果您想使用C#模块.

此外,还有一个技巧可以使用(这在F#核心库中用于List.map实际编译的函数List.Map).您可以使用该CompiledName属性在编译版本中指定名称:

module Bar = 
  [<CompiledName("Foo")>]
  let foo a = a + 1
Run Code Online (Sandbox Code Playgroud)

使用统一的命名约定可能更好,但是如果你想为F#用户保留一个漂亮的短名称,为C#用户保留标准的.NET名称,这是一个有趣的选择.