1. bool是基本值类型,Boolean 是对象.2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。

解决方案 »

  1.   

    使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean.
      

  2.   


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

  3.   


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

  4.   

    [Quote=引用 3 楼 wuyi8808 的回复:]
    引用 1 楼 js1722 的回复:
    1. bool是基本值类型,Boolean 是对象. 
    2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。 
     
      

  5.   

    string 和 String也是一个道理吧。
      

  6.   

    bool就像你的乳名,你爹妈以及你们内部所属成员都认识,Boolean就像你的学名。大家都认识。不过不管按照学名还是乳名称呼你,最终的目的是一样的,还是你这个人。
      

  7.   

    up空军,其实就是string与String,int与Int32等等的区别,其实就是别名而已,是一样的
      

  8.   

    确切地说,是: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 指令或程序集引用?)
      }
    }
      

  9.   

    bool 和 Boolean 别名关系
    同string 与Stringmsdn上的:bool 关键字是 System.Boolean 的别名。它用于声明变量来存储布尔值 true 和 false
      

  10.   


    如果你的示例正确,应该Boolean 是bool的别名
    bool是系统内置的,Boolean是在System空间定义的(bool别名)
      

  11.   


    哈哈,空军也用中式英语,isNotOK
      

  12.   

    MSDN:
    bool 关键字是 System.Boolean 的别名。
      

  13.   


    System.Boolean 是 .NET 类库中的一个类(确切地说是结构,struct),是 .NET 各语言通用的,不限于 C#,在 VB.NET、C++.NET、Dephi.NET、... 中都能使用。而 bool 是 C# 语言为 .NET 类库中通用类型 System.Boolean 起的别名,为了方便使用,少敲几个字符,或者为了和 Java 看起来更像些。
      

  14.   

    在线MSDN: http://msdn.microsoft.com/zh-cn/library/ya5y69ds.aspxC# 语言参考
    内置类型表(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;
      

  15.   

    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里都是对象时至今日随着编译器的优化、硬件的升级。。其实无所谓快慢了除非是在很特殊的环境,例如移动设备上的编程基本上。。这种效率的差别可以忽略
      

  16.   

    一样
    public struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool>
      

  17.   

    补充一下
    所有的值类型在c#里都不超过16 bytes,除了string
    实际上,string就是String,严格来说string并不是值类型因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),所以msdn上会说string是String的别名所以会造成很多人误会。。以为其他的值类型都是别名
      

  18.   


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

  19.   

    据我所知。。不存在c#中的类和.net Framework的类这种说法如果说用了string,编译器会将它换成String,从这个角度来说,是会在编译时快一些但Boolean,Int32和其他引用类型就不是这回事了。。由于string的特殊身份(实际上值类型里没有string,为了使用方便才把String通过syntax sugar的手段放进去)。。值类型是放在stack中,而引用类型是放在heap中。。heap里的东西是动态生成,所以会比放在stack中慢。。
      

  20.   

    无稽之谈。
    应该是:bool, System.Boolean, int, System.Int32 这些叫做值类型(value type) 
    string, System.String 叫做引用类型(Reference Type)
    bool 就是 .NET类型 System.Boolean 在 C# 中的别名。
      

  21.   


    确实不存在c#中的类和.net Framework的类这种说法,只能说 System.String 是 .NET 中的类,string 是其在 C# 中的别名
      

  22.   

    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. 自定义structref 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的区别最后,对某些人或有意或无意动不动就下无稽定论的态度表示遗憾。。不见得技术分高的就可以横着走路
      

  23.   

    typeof(string).IsClass是true
    typeof(int).IsClass是false
      

  24.   

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

  25.   


    请问,
    第一行,string 叫做值类型,这正确吗?
    第二行,Boolean, Int32这些叫做引用类型,这正确吗?难道不是无稽之谈吗?
      

  26.   

    没有区别
    The bool keyword is an alias of System.Boolean. It is used to declare variables to store the Boolean values, true and false
      

  27.   

    无论是 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# 中的别名。
      

  28.   

      看来得进来一位MVP看看了..
      

  29.   

      大家评论这些低层点东西的时候无非都是看的书面上的,要有事例证明.编写过.net Framework的除外.  
     任何事情都不能说的太死,留有余地,一起讨论嘛. MVP说的还是比较有信服力. ~.~ 
      

  30.   

    支持下空军我觉得就编译成中间语言的时候把bool转成System.BooleanSystem.Boolean也是值类型typeof(System.Boolean).BaseType.FullName
    输出System.ValueTypesizeof(System.Boolean)输出是1
    觉得上面可以说明System.Boolean是值类型
      

  31.   

    在MSDN里,string被明确归入到了引用类型
      

  32.   


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

  33.   


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

  34.   

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

  35.   

    假设有如下程序: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 是一样的,无区别的,不存在快慢问题。
      

  36.   

    一下 回家再看!
    我也不太清楚 只知道bool 是 Boolean的引用
    Boolean是对像 仅此而已
    遇到各位高手 正好学习一下!