Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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
C# F类型如何转换为C类型?_C#_F#_Naming Conventions - Fatal编程技术网

C# F类型如何转换为C类型?

C# F类型如何转换为C类型?,c#,f#,naming-conventions,C#,F#,Naming Conventions,如果在F#中,我有如下方法: drawBox drawSphere paintImage 他们会被转移到C#吗,完全一样 如果是这样的话,那么它不会破坏C#中的命名约定吗?在C#中,方法应该是PascalCase 或者我应该在F#中使用PascalCase来解决这个问题吗?type方法名称在F#和C#中都是相同的。如果您想在C#中使用PascalCase,您应该在F#中使用此命名约定,camelCase也是如此。您应该遵循 值得注意的是: 对于面向对象的代码,包括面向F的库,一定要使用.NE

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

drawBox
drawSphere
paintImage
他们会被转移到C#吗,完全一样

如果是这样的话,那么它不会破坏C#中的命名约定吗?在C#中,方法应该是PascalCase


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

type方法名称在F#和C#中都是相同的。如果您想在C#中使用PascalCase,您应该在F#中使用此命名约定,camelCase也是如此。

您应该遵循

值得注意的是:

  • 对于面向对象的代码,包括面向F的库,一定要使用.NET命名和大小写约定
  • 对于F#模块中的公共函数和值,请使用PascalCase或camelCase。 camelCase通常用于设计为不合格使用的公共功能(例如,
    invalidArg
    ),以及“标准收集功能”(例如,
    List.map
    )。在这两种情况下,函数名的行为与语言中的关键字非常相似
另一种切片方法:

  • 成员和类型应该始终是PascalCase,就像C一样#
  • 模块中的let绑定实体可以是camelCase,但这种东西通常不会公开地暴露在库之外,而库是由C使用的#

命名约定是针对人类的。编译器和运行时并不关心每个变量名是否完全不可读,它们仍然可以工作。

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

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

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

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

好的,谢谢。由于我使用C#more,我可能会这样做。我只是想在这种情况下,它会破坏F#的命名约定。谢谢,出于好奇,你还知道F#中的自由函数是如何在C#中出现的吗?因为C#不能有像F#这样的自由函数。F#中的模块看起来像C#中的静态类。请注意,F#中的“顶级”代码位于模块中;e、 g.
Program.fs
中的顶级代码被编译成名为
Program
的模块,因此C#将看到
Program.blah
。但是,如果你想与C#进行互操作,请避免使用公共F#模块(根据文档中的建议)。换言之,阅读文档;我们花了很多时间收集这些信息来回答这些问题。谢谢Brian,我不知道你是F#devs的一员。顺便问一下,使用CompiledName属性是否也可以接受,就像Tomas在回复中提到的那样?这似乎是两全其美。你可以用它,但是。。。它还提供了两个世界中最糟糕的一面,因为它可能会混淆非语言特定资产(如文档)。指南文件没有推荐(甚至没有提及)。但是,指南文档再次引导您朝着一个不成问题的方向前进(只向C#公开名称空间/类型/成员,在这种情况下命名约定是相同的)。camelCase还通常用于定义模块级F#函数,这些函数应该在语义上“镜像”同名的现有成员。例如,Microsoft.FSharp.Core.String.length函数“镜像”System.String.length实例成员。为什么要投反对票?我的意思是指出命名约定适合我们,当混合环境有不同的约定时,我们可以做适合我们的事情,因为编译器/运行时无论如何都会做正确的事情;它产生的问题和它解决的问题一样多。我能说的最好的一点是,它对于FSharp.Core.dll(如果我们将F#runtime移到.NET Framework中,编译的名称必须与.NET保持一致,这就是最初促使
CompiledName
的原因)。正如Brian所指出的,请只把它当作最后的选择。@布瑞恩,MITYA:最好使用一些统一的命名约定(FSARP.COR.DLL是一个证明:-)),但是可能会有<代码>编译名> /代码> ATTBUTBY可能是有用的,所以我认为值得一提。