在C#中,Decimal和decimal有什么不同?

9

在C#中,如果我使用小写字母“d”的decimal,IDE会将其显示为深蓝色(如int)。如果我使用大写字母“D”的Decimal,IDE会将其显示为青色(如类名)。在两种情况下,工具提示是struct System.Decimal

有什么区别吗?有一个“首选”吗?

9个回答

18

不是的;完全一样的。 decimal 被定义为 System.Decimal 的别名,并且通常更受欢迎,除了公共方法名,应该使用正确的名称(ReadDecimal 等) - 因为你的调用者可能不是 C#。这在 intReadInt32 的区别中更容易被注意到。

当然,没有 Java 风格的装箱差异。

(当然,如果您声明了一个更多命名空间局部的 Decimal,它会做一些完全不同的事情,那么就会有区别,但那是愚蠢的)。


谢谢,马克,恭喜你获得了10万的成就! - Jon B
谢谢 - 我很高兴在圣诞节之前赶到那里 ;-p - Marc Gravell
这是一个很棒的 MSDN 页面,展示了其他别名。http://msdn.microsoft.com/zh-cn/library/aa287910(VS.71).aspx - user172632
你能解释一下"ReadDecimal"和"ReadInt32"是什么吗?我从来没有见过这些Read*类型。 - G-Wiz
例如,@gWiz,像http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationinfo.getint32.aspx,http://msdn.microsoft.com/en-us/library/system.data.idatarecord.getint32.aspx,http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx这样的东西。 - Marc Gravell

2

其实这两个东西是一样的,Decimal是.Net类型,而decimal则是C#关键字。


2

System.Decimal是.NET Framework中的一种类型,而decimal则是C#语言中的别名

它们都被编译成IL中的System.Decimal,因此没有区别。

同样的情况也适用于intSystem.Int32stringSystem.String等。


1

decimal 是一个关键字,它总是指向基类库中定义的结构体 System.Decimal。在大多数人的源代码顶部有 using System;,因此 Decimal 通常意味着与之相同的东西。但是,严格来说,它们并不完全相同(你不能盲目地查找和替换它们):

 namespace Test {
    class Decimal { }
 }

 // File2.cs
 using Test;
 class DecimalIsNotdecimal {
      void Method(decimal d) { ... }
      void Method(Decimal d) { ... } // works!
 }

1

decimal是Decimal的别名,它们是同一个东西。


1

深蓝色用于语言关键字,青绿色用于类型。在decimal的情况下,它是代表类型别名的关键字。


0

不是的。它们只是快捷方式。

如果你将鼠标悬停在十进制上,你会看到 System.Decimal。就像 int 和 System.Int32、object 和 System.Object、string 和 System.String、double 和 System.Double 一样。

我更喜欢使用 decimal 和 string,但我认为这真的是个人喜好。


0
不,它们是同一件事。其中一个被着色为关键字(decimal),另一个被着色为类型(Decimal)。关键字只是类型的别名。

0

这是同样的事情。“decimal”是C#中System.Decimal的关键字。

这也适用于其他类型,如string和String等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接