当我使用 resharper 工具时,它只是说“使用内置类型“string”而不是使用“String”。同样,它将 UInt32 转换为 uint。
我用谷歌搜索了这个,我只能找到它们是别名。别名表示“重复”。好的。但是,他们到底是什么意思呢?
- 当两者相同时,为什么该工具建议对“String”和“UInt32”使用“string”和“uint”?
- 此外,点网类型和 C# 类型之间有什么区别。
谷歌搜索了它,但找不到任何令人满意的答案。谢谢。
当我使用 resharper 工具时,它只是说“使用内置类型“string”而不是使用“String”。同样,它将 UInt32 转换为 uint。
我用谷歌搜索了这个,我只能找到它们是别名。别名表示“重复”。好的。但是,他们到底是什么意思呢?
谷歌搜索了它,但找不到任何令人满意的答案。谢谢。
Rafal 给出的答案总结了这一点,但我想做一些澄清:唯一需要使用关键字而不是类型名称的情况是在定义枚举的基础类型时——在这种情况下,使用后者是不允许的。
例子:
enum Foo : Int32
{
}
以上不会编译。
此外,虽然我通常更喜欢使用关键字,但必须说,虽然在 .NET Framework 上运行的每种语言的类型都相同,但关键字却不同。例如,虽然在 C#long
中是 的别名Int64
,但在 C++/CLI 中,long
实际上是Int32
. 例如,在 CLI 语言之间移植代码时,这可能会造成一些混乱。
String
andstring
是一样的,UInt32
and也是一样的uint
。这只是由于 CLS 兼容,因此您可以编写 C# 类库并在 VB 程序中使用,反之亦然。
MSDN的一些摘录:
为了与其他对象完全交互而不管它们是用什么语言实现的,对象必须只向调用者公开那些它们必须与之交互的所有语言共有的特性。因此,定义了公共语言规范 (CLS),它是许多应用程序所需的一组基本语言特性。CLS 规则定义了通用类型系统的一个子集;也就是说,所有适用于通用类型系统的规则都适用于 CLS,除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以依赖以提供多种语言的功能来帮助增强和确保语言互操作性。
请参考通用语言规范
和之间没有区别String
,string
因为正如您所指出的那样,它们是别名 - 别名只是同一事物的不同名称。
至于为什么 Resharper 会做一些你应该在 resharper 专用网站上询问或寻求的事情。在我看来,这只是惯例的问题——你应该使用其中之一,为什么不使用大多数人使用的那个。