当前位置:编程学习 > C#/ASP.NET >>

c# 中 bool 与 Boolean 什么有什么区别

c# 中 bool 与 Boolean 什么有什么区别 --------------------编程问答-------------------- 1. bool是基本值类型,Boolean 是对象.

2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。 --------------------编程问答-------------------- 使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. --------------------编程问答--------------------
引用 1 楼 js1722 的回复:
1. bool是基本值类型,Boolean 是对象. 
2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。


1. 错,bool 和 Boolean 是同样的,正如2所说,bool是Boolean的别名.
2. 对。 --------------------编程问答--------------------
引用 2 楼 js1722 的回复:
使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean.


没有根据。bool 和 Boolean 是一样的,不存在快慢问题。 --------------------编程问答-------------------- 我也明白了! --------------------编程问答-------------------- [Quote=引用 3 楼 wuyi8808 的回复:]
引用 1 楼 js1722 的回复:
1. bool是基本值类型,Boolean 是对象. 
2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。 
 

--------------------编程问答-------------------- string 和 String也是一个道理吧。 --------------------编程问答-------------------- bool就像你的乳名,你爹妈以及你们内部所属成员都认识,Boolean就像你的学名。大家都认识。不过不管按照学名还是乳名称呼你,最终的目的是一样的,还是你这个人。
引用楼主 liwhsh 的帖子:
c# 中 bool 与 Boolean 什么有什么区别
--------------------编程问答--------------------
引用 3 楼 wuyi8808 的回复:
引用 1 楼 js1722 的回复:
1.bool是基本值类型,Boolean 是对象.
2.bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。


1. 错,bool 和 Boolean 是同样的,正如2所说,bool是Boolean的别名.
2. 对。

学习了up --------------------编程问答-------------------- up空军,其实就是string与String,int与Int32等等的区别,其实就是别名而已,是一样的 --------------------编程问答-------------------- 确切地说,是:

C# 中 bool 与 System.Boolean 没有区别, bool 是 System.Boolean 的别名。



细究起来,C# 中 bool 与 Boolean 还是有一点区别的,那就是:

// using System;  // 假设 using System; 被注释掉了

class Program
{
  static void Main()
  {
    bool isOK = false;      // 没问题
    Boolean isNotOK = true; // error CS0246: 找不到类型或命名空间名称“Boolean”(是否缺少 using 指令或程序集引用?)
  }
}
--------------------编程问答-------------------- bool 和 Boolean 别名关系
同string 与String

msdn上的:bool 关键字是 System.Boolean 的别名。它用于声明变量来存储布尔值 true 和 false --------------------编程问答--------------------
引用 11 楼 wuyi8808 的回复:
确切地说,是: 

C# 中 bool 与 System.Boolean 没有区别, bool 是 System.Boolean 的别名。 


细究起来,C# 中 bool 与 Boolean 还是有一点区别的,那就是: 


C# code// using System;  // 假设 using System; 被注释掉了

class Program
{
  static void Main()
  {
    bool isOK = false;      // 没问题
    Boolean isNotOK = true; // error CS0246: 找不到类型或命名空间名称“Boolean”(是否缺少 u…


如果你的示例正确,应该Boolean 是bool的别名
bool是系统内置的,Boolean是在System空间定义的(bool别名) --------------------编程问答--------------------
引用 11 楼 wuyi8808 的回复:
确切地说,是:

C# 中 bool 与 System.Boolean 没有区别, bool 是 System.Boolean 的别名。


细究起来,C# 中 bool 与 Boolean 还是有一点区别的,那就是:

C# code//using System;//假设 using System; 被注释掉了classProgram
{staticvoidMain()
  {boolisOK=false;//没问题Boolean isNotOK=true;//error CS0246: 找不到类型或命名空间名称“Boolean”(是否缺少 using 指令或程序集引用?)}
}


哈哈,空军也用中式英语,isNotOK --------------------编程问答-------------------- MSDN:
bool 关键字是 System.Boolean 的别名。 --------------------编程问答-------------------- 一样的,就和一个人有小名一样 --------------------编程问答--------------------
引用 13 楼 lovexxj 的回复:
如果你的示例正确,应该Boolean 是bool的别名 
bool是系统内置的,Boolean是在System空间定义的(bool别名)


System.Boolean 是 .NET 类库中的一个类(确切地说是结构,struct),是 .NET 各语言通用的,不限于 C#,在 VB.NET、C++.NET、Dephi.NET、... 中都能使用。

而 bool 是 C# 语言为 .NET 类库中通用类型 System.Boolean 起的别名,为了方便使用,少敲几个字符,或者为了和 Java 看起来更像些。 --------------------编程问答-------------------- 在线MSDN: http://msdn.microsoft.com/zh-cn/library/ya5y69ds.aspx

C# 语言参考
内置类型表(C# 参考)

下表显示了内置 C# 类型的关键字,这些类型是 System 命名空间中的预定义类型的别名。

C# 类型  .NET Framework 类型
bool    System.Boolean
byte    System.Byte
sbyte   System.SByte
char    System.Char
decimal System.Decimal
double  System.Double
float   System.Single
int     System.Int32
uint    System.UInt32
long    System.Int64
ulong   System.UInt64
object  System.Object
short   System.Int16
ushort  System.UInt16
string  System.String


备注

除了 object 和 string 外,表中的所有类型均称为简单类型。

C# 类型的关键字及其别名可以互换。例如,可使用下列两种声明中的一种来声明一个整数变量:

int x = 123;
System.Int32 x = 123;
--------------------编程问答-------------------- bool, string, int 这些叫做值类型(value type)
Boolean, String, Int32这些叫做引用类型(Reference Type)

那么,很自然地,你们的下一个问题就是值类型和引用类型的区别在哪.....
前人写了一篇文章,大家可以观摩一下
http://www.albahari.com/valuevsreftypes.aspx

粗略地说,值类型是存在内存的stack 中(即堆栈),而引用类型存在heap(即堆)

那么。。。你可以更粗略地认为放在stack 中会快一些,因为heap是程序运行时动态生成的,实际上class都是在run-time的时候生成放在heap的。。这也是一个早期的“罪状”说java很慢,因为所有东西在java里都是对象

时至今日。。。随着编译器的优化、硬件的升级。。其实无所谓快慢了。。。除非是在很特殊的环境,例如移动设备上的编程。。。

基本上。。这种效率的差别可以忽略。。。 --------------------编程问答-------------------- C#中没区别 --------------------编程问答-------------------- 一样
public struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool> --------------------编程问答-------------------- 补充一下。。。
所有的值类型在c#里都不超过16 bytes,除了string
实际上,string就是String,严格来说string并不是值类型。。。

因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),所以msdn上会说string是String的别名。。。所以会造成很多人误会。。以为其他的值类型都是别名 --------------------编程问答-------------------- 顶 --------------------编程问答--------------------
引用 4 楼 wuyi8808 的回复:
引用 2 楼 js1722 的回复:
使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. 
 

没有根据。bool 和 Boolean 是一样的,不存在快慢问题。


虽然你是星星,我还是要反抗一下 呵呵~~   

这个也是我引用的其他牛人的说法,不知道对不对,给你PK一下.虽然是string与String但是原理相同.
string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色) 
c# string映射为.net Framework的String 
如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作  --------------------编程问答-------------------- 据我所知。。不存在c#中的类和.net Framework的类这种说法。。。

如果说用了string,编译器会将它换成String,从这个角度来说,是会在编译时快一些。。。但Boolean,Int32和其他引用类型就不是这回事了。。由于string的特殊身份(实际上值类型里没有string,为了使用方便才把String通过syntax sugar的手段放进去)。。

值类型是放在stack中,而引用类型是放在heap中。。heap里的东西是动态生成,所以会比放在stack中慢。。



引用 24 楼 js1722 的回复:
引用 4 楼 wuyi8808 的回复:
引用 2 楼 js1722 的回复: 
使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. 


没有根据。bool 和 Boolean 是一样的,不存在快慢问题。 
 

虽然你是星星,我还是要反抗一下 呵呵~~  

这个也是我引用的其他牛人的说法,不知道对不对,给你PK一下.虽然是string与String但是原理相同. 
string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色) 
--------------------编程问答--------------------
引用 19 楼 superplayboy 的回复:
bool, string, int 这些叫做值类型(value type) 
Boolean, String, Int32这些叫做引用类型(Reference Type) 

无稽之谈。




应该是:

bool, System.Boolean, int, System.Int32 这些叫做值类型(value type) 
string, System.String 叫做引用类型(Reference Type)

bool 就是 .NET类型 System.Boolean 在 C# 中的别名。
--------------------编程问答--------------------
引用 22 楼 superplayboy 的回复:
补充一下。。。 
所有的值类型在c#里都不超过16 bytes,除了string 
实际上,string就是String,严格来说string并不是值类型。。。 

因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),所以msdn上会说string是String的别名。。。所以会造成很多人误会。。以为其他的值类型都是别名

更是无稽之谈。 --------------------编程问答--------------------
引用 25 楼 superplayboy 的回复:
据我所知。。不存在c#中的类和.net Framework的类这种说法。。。 


确实不存在c#中的类和.net Framework的类这种说法,只能说 System.String 是 .NET 中的类,string 是其在 C# 中的别名。 --------------------编程问答--------------------
引用 26 楼 wuyi8808 的回复:
应该是: 
bool, System.Boolean, int, System.Int32 这些叫做值类型(value type) 
string, System.String 叫做引用类型(Reference Type) 

bool 就是 .NET类型 System.Boolean 在 C# 中的别名。 


引用 27 楼 wuyi8808 的回复:
更是无稽之谈。


ref 1:http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx
value types 包括2大类Structs 和Enumerations 
其中Structs 包括
1)Numeric types 
2)Integral types 整型,包括:sbyte,byte ,char ,short ,ushort ,int ,uint ,long ,ulong 
3)Floating-Point Types 浮点数,包括:float ,double
4)decimal 
5)bool 
6)User defined structs. 自定义struct

ref 2:http://msdn.microsoft.com/en-us/library/490f96s2.aspx
reference type包括
1)class 
2)interface 
3)delegate 
也就是说。。。除了string/String,其他的都是value type


既然string是一个reference type,那么它或者是class,或者是interface,或者是delegate。。。排除法,string不可能是inteface和delegate,所以string是一个类。

既然是类,为什么使用string可以像其它value type一样?在使用前不需要new?暂时我在MSDN里没有找到说明,但是google中不难找到一种普遍的说法,因为string太常使用,为了便利,所以特意将它在value type中做一个别名。。实际上不是不需要new,而是编译器帮你new了,让你感觉和其他的value type一样。。这实际上就是语法糖。。实际上除了string/String,object/Object也是一样


BTW,MSDN中的确分了C#“类”和.NET“类”,不过这个“类”是type(类型)的意思,而不是class,我初时的理解以为是class,所以我会说不存在这种说法。。。
看这里:http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx
其中有一句比较有意思:
All of the types in the table, except object and string, are referred to as simple types. 
这句话提到了“simple type”的说法,在有些教材里,会把value type叫做simple type,MSDN在这里不知道是有意还是无意。。“意外”地列出了value type和reference type的区别。。。

最后,对某些人或有意或无意动不动就下无稽定论的态度表示遗憾。。不见得技术分高的就可以横着走路 --------------------编程问答-------------------- 方言与普通话的区别 --------------------编程问答-------------------- typeof(string).IsClass是true
typeof(int).IsClass是false --------------------编程问答-------------------- 领教了,以前都没怎么注意 --------------------编程问答--------------------
引用 29 楼 superplayboy 的回复:
引用 26 楼 wuyi8808 的回复:
应该是: 
bool, System.Boolean, int, System.Int32 这些叫做值类型(value type) 
string, System.String 叫做引用类型(Reference Type) 
bool 就是 .NET类型 System.Boolean 在 C# 中的别名。 

引用 27 楼 wuyi8808 的回复:
因为值类型在编程上的便利,因此微软特别地将String放进值类型里,更是无稽之谈。

最后,对某些人或有意或无意动不动就下无稽定论的态度表示遗憾。。不见得技术分高的就可以横着走路


让大家评评看,我26楼和27楼那句话说错了? --------------------编程问答-------------------- System.Boolean 是 .NET 类库中的一个类(确切地说是结构,struct),是 .NET 各语言通用的,不限于 C#,在 VB.NET、C++.NET、Dephi.NET、... 中都能使用
bool 是 C# 语言为Boolean 起的别名. --------------------编程问答--------------------
引用 19 楼 superplayboy 的回复:
bool, string, int 这些叫做值类型(value type) 
Boolean, String, Int32这些叫做引用类型(Reference Type) 


请问,
第一行,string 叫做值类型,这正确吗?
第二行,Boolean, Int32这些叫做引用类型,这正确吗?

难道不是无稽之谈吗? --------------------编程问答-------------------- 很强大

继续看下文 --------------------编程问答--------------------
引用 22 楼 superplayboy 的回复:
因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),


难道不更是无稽之谈? --------------------编程问答-------------------- 没有区别
The bool keyword is an alias of System.Boolean. It is used to declare variables to store the Boolean values, true and false --------------------编程问答-------------------- 无论是 string,还是 System.String,都是引用类型。不存在19楼所说,string 叫做值类型的情况。

对C#来说,string 和 System.String 是一样的,string 是 System.String 在 C# 中的别名。



无论是 bool,还是 System.Boolean,都是值类型。不存在19楼所说,Boolean 叫做引用类型的情况。

对C#来说,bool 和 System.Boolean 是一样的,bool 是 System.Boolean 在 C# 中的别名。
--------------------编程问答-------------------- 一个东西。 --------------------编程问答--------------------   看来得进来一位MVP看看了.. --------------------编程问答--------------------   大家评论这些低层点东西的时候无非都是看的书面上的,要有事例证明.编写过.net Framework的除外.  
 任何事情都不能说的太死,留有余地,一起讨论嘛. MVP说的还是比较有信服力. ~.~  --------------------编程问答-------------------- 支持下空军

我觉得就编译成中间语言的时候把bool转成System.Boolean

System.Boolean也是值类型

typeof(System.Boolean).BaseType.FullName
输出System.ValueType

sizeof(System.Boolean)

输出是1


觉得上面可以说明System.Boolean是值类型
--------------------编程问答-------------------- 在MSDN里,string被明确归入到了引用类型 --------------------编程问答--------------------
引用 4 楼 wuyi8808 的回复:
引用 2 楼 js1722 的回复:
使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. 
 

没有根据。bool 和 Boolean 是一样的,不存在快慢问题。


不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚. 
(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时候把bool转换成Boolean的话,从这个角度考虑,那效率肯定会高一点.  ~.~ --------------------编程问答--------------------
引用 45 楼 js1722 的回复:
不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚. 
(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时…


编译生成的IL代码是一样,没有区别的,所以说不存在快慢问题。不信你自己用 ILDASM 看一下就知道了。
--------------------编程问答--------------------
引用 46 楼 wuyi8808 的回复:
引用 45 楼 js1722 的回复:

不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚.
(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时…


编译生成的IL代码是一样,没有区别的,所以说不存在快慢问题。不信你自己用 ILDASM 看一下就知道了。

就是,如果你会用ildasm看IL代码的话,根本就不会相信什么所谓的使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. 这种话,由头到尾空军都没有说错,19楼与22楼之说的确是无稽之谈 --------------------编程问答-------------------- 假设有如下程序:

class Program
{
  void Method1()
  {
    bool a;
  }

  void Method2()
  {
    System.Boolean a;
  }

  static void Main(){}
}


编译一下,有两个警告,不用理会,

Program.cs(5,10): warning CS0168: 声明了变量“a”,但从未使用过
Program.cs(10,20): warning CS0168: 声明了变量“a”,但从未使用过


然后用 ILDASM 看一上生成的 Program.exe,我们会看到:

.method private hidebysig instance void  Method1() cil managed
{
  // 代码大小       2 (0x2)
  .maxstack  0
  .locals init (bool V_0)
  IL_0000:  nop
  IL_0001:  ret
} // end of method Program::Method1


.method private hidebysig instance void  Method2() cil managed
{
  // 代码大小       2 (0x2)
  .maxstack  0
  .locals init (bool V_0)
  IL_0000:  nop
  IL_0001:  ret
} // end of method Program::Method2


充分证明 bool 和 System.Boolean 是一样的,无区别的,不存在快慢问题。
--------------------编程问答-------------------- mark一下 回家再看!
我也不太清楚 只知道bool 是 Boolean的引用
Boolean是对像 仅此而已
遇到各位高手 正好学习一下! --------------------编程问答-------------------- 顶,所有星星都是我的老大,都要膜拜! --------------------编程问答-------------------- 为了彻底证明 bool 和 System.Boolean 对 C# 来说是一样的,
你可以写如下两个程序,分别编译:

class Program1
{
  static void Main()
  {
    bool a = true;
    System.Console.WriteLine(a);
  }
}


class Program2
{
  static void Main()
  {
    System.Boolean a = true;
    System.Console.WriteLine(a);
  }
}


然后用 ILDASM 查看他们的 IL 代码:

.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // 代码大小       11 (0xb)
  .maxstack  1
  .locals init (bool V_0)
  IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  call       void [mscorlib]System.Console::WriteLine(bool)
  IL_0009:  nop
  IL_000a:  ret
} // end of method Program::Main


.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // 代码大小       11 (0xb)
  .maxstack  1
  .locals init (bool V_0)
  IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  call       void [mscorlib]System.Console::WriteLine(bool)
  IL_0009:  nop
  IL_000a:  ret
} // end of method Program2::Main


看看有什么差别,是不是一模一样的?
--------------------编程问答--------------------   那就是咯,有证据才能让人信服嘛. --------------------编程问答-------------------- 可怜的52楼阿布。
以后看到星星老大,敬仰就可以了。 --------------------编程问答--------------------   == 刚才那个是编译完成以后的结果,按照有些说法,编译完成以后bool是会转换的和Boolean一样的,所以结果也是会相同的。
 那么如何去确定它在编译时,没有被转换过. --------------------编程问答--------------------   呵呵~  反正这几天换工作呢,在公司的最后一周,有的是时间泡CSDN. 以后就没机会咯 ~ --------------------编程问答-------------------- 有点意思 --------------------编程问答-------------------- 最好自己写段短一点的代码测试一下就OK了 --------------------编程问答--------------------
引用 22 楼 superplayboy 的回复:
补充一下。。。 
所有的值类型在c#里都不超过16 bytes,除了string 
实际上,string就是String,严格来说string并不是值类型。。。 

因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),所以msdn上会说string是String的别名。。。所以会造成很多人误会。。以为其他的值类型都是别名


既然要论战,干脆就说得更清楚些:

“所有的值类型在c#里都不超过16 bytes,除了string ”也是没有根据的说法。

君请看:

using System;
using System.Drawing;
using System.Runtime.InteropServices;

class Program
{
  static void Main()
  {
    Color color = new Color();
    Console.WriteLine(typeof(Color).IsValueType);  // 输出:True         
    Console.WriteLine(Marshal.SizeOf(color));      // 输出:24
  }
}


C#中的值类型 System.Drawing.Color 就是 24 bytes 的。

我用的是 C# 2.0 的编译器:
Microsoft (R) Visual C# 2005 编译器 版本 8.00.50727.1433
用于 Microsoft (R) Windows (R) 2005 Framework 版本 2.0.50727
版权所有 (C) Microsoft Corporation 2001-2005。保留所有权利。


在未来的编译器版本中 System.Drawing.Color 的大小说不定会变化也未可知。 --------------------编程问答-------------------- 呵呵  谈得欢啊 就是看不懂...... --------------------编程问答--------------------
引用 54 楼 js1722 的回复:
  == 刚才那个是编译完成以后的结果,按照有些说法,编译完成以后bool是会转换的和Boolean一样的,所以结果也是会相同的。 
那么如何去确定它在编译时,没有被转换过.



请回头再看一下我在4楼的说法:

引用 4 楼 wuyi8808 的回复:
引用 2 楼 js1722 的回复:
使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. 
 
没有根据。bool 和 Boolean 是一样的,不存在快慢问题。


我是说“使用起来的话Boolean相对于bool要快一点。”的说法没有根据,
并指出:“bool 和 Boolean 是一样的,不存在快慢问题。”

并没有说:“编译器里面会把bool转换成Boolean”这句话有问题。


--------------------编程问答-------------------- http://www.cnblogs.com/WateringPig/archive/2008/01/29/1057097.html

这个文章有对编译时和运行时的效率的解释,虽然不是bool与Boolean,但是它们道理都差不多..

编译以后的IL代码都是一样的,但是效率却是不一样的。 --------------------编程问答-------------------- up~! --------------------编程问答-------------------- 实际上,bool 和 System.Boolean 是一回事,严格说来,不存在谁转换为谁的问题。

你看看48楼和51楼的 IL 代码,用的是 bool,当然,用 System.Boolean 也是一样的。 --------------------编程问答--------------------

C# 类型  .NET Framework 类型
bool    System.Boolean
byte    System.Byte
sbyte   System.SByte
char    System.Char
decimal System.Decimal
double  System.Double
float   System.Single
int     System.Int32
uint    System.UInt32
long    System.Int64
ulong   System.UInt64
object  System.Object
short   System.Int16
ushort  System.UInt16
string  System.String


--------------------编程问答--------------------
引用 61 楼 js1722 的回复:
http://www.cnblogs.com/WateringPig/archive/2008/01/29/1057097.html 

这个文章有对编译时和运行时的效率的解释,虽然不是bool与Boolean,但是它们道理都差不多.. 

编译以后的IL代码都是一样的,但是效率却是不一样的。


那篇文章讲的是 const 和 ReadOnly 的区别。

const 和 ReadOnly 是有区别的(这个区别你可以仔细体会,仔细看看那篇文章),但 bool 和 System.Boolean 是没有区别的。


另外,“编译以后的IL代码都是一样的,但是效率却是不一样的。”这句话不对,如果IL代码一样,行为就一样,效率也一样。
--------------------编程问答--------------------   下班了,回去吃饭了.    :) --------------------编程问答--------------------
引用 8 楼 rollng 的回复:
bool就像你的乳名,你爹妈以及你们内部所属成员都认识,Boolean就像你的学名。大家都认识。不过不管按照学名还是乳名称呼你,最终的目的是一样的,还是你这个人。 
引用楼主 liwhsh 的帖子:
c# 中 bool 与 Boolean 什么有什么区别 


比喻贴切~ --------------------编程问答-------------------- 据我所知 编译以后是完全一样的 但编译的时候
用bool 编译器会自动增加一条 using bool = System.Boolean
而Boolean没有 不知道这是不是阿布说的效率问题
--------------------编程问答-------------------- 个人感觉,也是没区别的。

一个是另一个的缩写罢了。
--------------------编程问答-------------------- 学习了,有辩论才会有进步!反正我一直用boolean,有时换成bool也不会出错,所以个人感觉应该和前面说的是一样的,两个没区别 --------------------编程问答-------------------- 小弟有个问题?请问如果只是别名的区别的话,那么一种语言费很大力气来实现别名?
请教是不是还有其他的区别? --------------------编程问答-------------------- up --------------------编程问答-------------------- bool和Boolean是一样的,bool是别名,他们都是对像,.net中连""也是对像,没有简单类型的一说。 --------------------编程问答-------------------- 谢谢楼上各位专家啊 小弟在这里学习了 --------------------编程问答-------------------- 正好进来学习一下~ --------------------编程问答--------------------    Sorry..  那个文章发的是错的~    
  再说下去就没意义了。 呵呵~    看来以后得像楼上那位兄弟说的看到星星老大就景仰了。 --------------------编程问答--------------------
引用 76 楼 js1722 的回复:
  Sorry..  那个文章发的是错的~    
  再说下去就没意义了。 呵呵~    看来以后得像楼上那位兄弟说的看到星星老大就景仰了。


星星也不一定就是对的。

判断一个问题的对错,主要依据是:

1. MSDN。
2. 实际用 ILDASM 查看一下 IL 代码。

注意,偶尔 MSDN 也会出错,有疑问时还是要用实践检验。
--------------------编程问答-------------------- 星星并不代表什么权威,星星只代表在论坛上回答别人的问题多些,勤快些。

只要努力,多帮助别人,你也可以成为星星。(你看,现在论坛上星星何其多)
--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 讲到基础的东东,推荐两本书(至少我受益非浅):

《.NET本质论》
 


《框架设计(第2版) CLR Via C#》


--------------------编程问答-------------------- --------------------编程问答-------------------- 我问下,那c#里面还有装箱和拆箱的说法吗?

搞的好晕啊!! --------------------编程问答--------------------
引用 83 楼 tristan0429 的回复:
我问下,那c#里面还有装箱和拆箱的说法吗? 


有。 --------------------编程问答-------------------- 装拆箱都是全自动的吧。至少在代码里看不出来,是不是这样??
--------------------编程问答-------------------- 这类问题,实际上看看CLR vir C# 等书籍,应该就比较清楚了~
学习~ --------------------编程问答-------------------- 在线MSDN: http://msdn.microsoft.com/zh-cn/library/yz2be5wk.aspx

C# 编程指南
装箱和取消装箱(C# 编程指南)

装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。

性能

相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,取消装箱所需的强制转换也需要进行大量的计算。

装箱

装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。 

取消装箱

取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括: 

1. 检查对象实例,以确保它是给定值类型的装箱值。 

2. 将该值从实例复制到值类型变量中。 


以下语句同时说明了装箱和取消装箱操作:

int i = 123;      // 值类型
object o = i;     // 装箱
int j = (int)o;   // 取消装箱
 

--------------------编程问答-------------------- 学习~
空军大哥给我解决了不少问题
哪个密码给忘记了 重新注册了个~

收益非牵~ --------------------编程问答-------------------- 新手多多支持哈 --------------------编程问答-------------------- 帖子不错。学习了,激烈的辩论,受益匪浅。 --------------------编程问答-------------------- 还是Delphi的VCL好,打开类,一看就知道是如何实现的 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 专业[img=http://p.blog.csdn.net/images/p_blog_csdn_net/zswang/%E5%90%B8%E7%83%9F.gif]图[/img] --------------------编程问答-------------------- 支持下空军

对19楼那样明显不正确的说话就应该 强烈的指出 否则会误导初学者 --------------------编程问答-------------------- bool是C#中的基本数据类型
Boolean是数据类型的封装类 是对象类型
bool对应Boolean --------------------编程问答--------------------
引用 68 楼 keystudio 的回复:
据我所知 编译以后是完全一样的 但编译的时候 
用bool 编译器会自动增加一条 using bool = System.Boolean 
而Boolean没有 不知道这是不是阿布说的效率问题 


无语中。。。。 --------------------编程问答--------------------
引用 11 楼 wuyi8808 的回复:
确切地说,是: 

C# 中 bool 与 System.Boolean 没有区别, bool 是 System.Boolean 的别名。 


细究起来,C# 中 bool 与 Boolean 还是有一点区别的,那就是: 


C# code// using System;  // 假设 using System; 被注释掉了

class Program
{
  static void Main()
  {
    bool isOK = false;      // 没问题
    Boolean isNotOK = true; // error CS0246: 找不到类型或命名空间名称“Boolean”(是否缺少 u…

高手啊,这一点还不知道啊。 --------------------编程问答-------------------- 学习…… --------------------编程问答-------------------- 两者是一样的,但是使用Boolean的速度好像要快些。 --------------------编程问答--------------------
引用 71 楼 wangchao813 的回复:
小弟有个问题?请问如果只是别名的区别的话,那么一种语言费很大力气来实现别名? 
请教是不是还有其他的区别?


在 C# 中,下表左列的 C# 类型与右列的 .NET Framework 类型没有任何区别,除了字符个数不同外。

C# 类型  .NET Framework 类型
bool    System.Boolean
byte    System.Byte
sbyte   System.SByte
char    System.Char
decimal System.Decimal
double  System.Double
float   System.Single
int     System.Int32
uint    System.UInt32
long    System.Int64
ulong   System.UInt64
object  System.Object
short   System.Int16
ushort  System.UInt16
string  System.String


至于说那么一种语言费很大力气来实现别名? 

我猜应该是因为 C# 和 C/C++ 有着说不清道不明的联系,而 char、double、float、int、long 等都是 C/C++ 的内置类型,C# 提供这些内置类型可能是感觉上更亲切吧(我猜的)。另外,名字短些,也可以少打几个字,程序员就可以偷懒了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,