c# 中 bool 与 Boolean 什么有什么区别 1. bool是基本值类型,Boolean 是对象.2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用起来的话Boolean相对于bool要快一点。 编译器里面会把bool转换成Boolean. 1. 错,bool 和 Boolean 是同样的,正如2所说,bool是Boolean的别名.2. 对。 没有根据。bool 和 Boolean 是一样的,不存在快慢问题。 [Quote=引用 3 楼 wuyi8808 的回复:]引用 1 楼 js1722 的回复:1. bool是基本值类型,Boolean 是对象. 2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。 string 和 String也是一个道理吧。 bool就像你的乳名,你爹妈以及你们内部所属成员都认识,Boolean就像你的学名。大家都认识。不过不管按照学名还是乳名称呼你,最终的目的是一样的,还是你这个人。 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 与Stringmsdn上的:bool 关键字是 System.Boolean 的别名。它用于声明变量来存储布尔值 true 和 false 如果你的示例正确,应该Boolean 是bool的别名bool是系统内置的,Boolean是在System空间定义的(bool别名) 哈哈,空军也用中式英语,isNotOK MSDN:bool 关键字是 System.Boolean 的别名。 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.aspxC# 语言参考内置类型表(C# 参考)下表显示了内置 C# 类型的关键字,这些类型是 System 命名空间中的预定义类型的别名。C# 类型 .NET Framework 类型bool System.Booleanbyte System.Bytesbyte System.SBytechar System.Chardecimal System.Decimaldouble System.Doublefloat System.Singleint System.Int32uint System.UInt32long System.Int64ulong System.UInt64object System.Objectshort System.Int16ushort System.UInt16string 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里都是对象时至今日随着编译器的优化、硬件的升级。。其实无所谓快慢了除非是在很特殊的环境,例如移动设备上的编程基本上。。这种效率的差别可以忽略 一样public struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool> 补充一下所有的值类型在c#里都不超过16 bytes,除了string实际上,string就是String,严格来说string并不是值类型因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),所以msdn上会说string是String的别名所以会造成很多人误会。。以为其他的值类型都是别名 虽然你是星星,我还是要反抗一下 呵呵~~ 这个也是我引用的其他牛人的说法,不知道对不对,给你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中慢。。 无稽之谈。应该是:bool, System.Boolean, int, System.Int32 这些叫做值类型(value type) string, System.String 叫做引用类型(Reference Type)bool 就是 .NET类型 System.Boolean 在 C# 中的别名。 确实不存在c#中的类和.net Framework的类这种说法,只能说 System.String 是 .NET 中的类,string 是其在 C# 中的别名。 ref 1:http://msdn.microsoft.com/en-us/library/s1ax56ch.aspxvalue 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 ,double4)decimal 5)bool 6)User defined structs. 自定义structref 2:http://msdn.microsoft.com/en-us/library/490f96s2.aspxreference 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是truetypeof(int).IsClass是false System.Boolean 是 .NET 类库中的一个类(确切地说是结构,struct),是 .NET 各语言通用的,不限于 C#,在 VB.NET、C++.NET、Dephi.NET、... 中都能使用bool 是 C# 语言为Boolean 起的别名. 请问,第一行,string 叫做值类型,这正确吗?第二行,Boolean, Int32这些叫做引用类型,这正确吗?难道不是无稽之谈吗? 没有区别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.BooleanSystem.Boolean也是值类型typeof(System.Boolean).BaseType.FullName输出System.ValueTypesizeof(System.Boolean)输出是1觉得上面可以说明System.Boolean是值类型 在MSDN里,string被明确归入到了引用类型 不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚. (我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时候把bool转换成Boolean的话,从这个角度考虑,那效率肯定会高一点. ~.~ 编译生成的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 是一样的,无区别的,不存在快慢问题。 一下 回家再看!我也不太清楚 只知道bool 是 Boolean的引用Boolean是对像 仅此而已遇到各位高手 正好学习一下! 请问c#中如何在静态函数中得到实例类的中控件值 接收手机短信的问题 Winform 实现不同语言的界面转换 Extjs gridPanel导出Excel 如何实现?(WebForm) C#在PPC显示gif图片(立即给分) web开发下,如何建立只有通过身份验证方可下载文件的程序? 获取网页中的图片 国外的一个开源通用蜘蛛程序!带索引程序!少有的东西!有兴趣的研究下 怎么样使office中能使用C#开发的activex? 请教:.net软件工程师应具备哪些核心技术能力 求助?无法在System.int32和System.string上执行“like”操作 C#中多线程调用Com接口如何操作
1. 错,bool 和 Boolean 是同样的,正如2所说,bool是Boolean的别名.
2. 对。
没有根据。bool 和 Boolean 是一样的,不存在快慢问题。
引用 1 楼 js1722 的回复:
1. bool是基本值类型,Boolean 是对象.
2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。
{
static void Main()
{
bool isOK = false; // 没问题
Boolean isNotOK = true; // error CS0246: 找不到类型或命名空间名称“Boolean”(是否缺少 using 指令或程序集引用?)
}
}
同string 与Stringmsdn上的:bool 关键字是 System.Boolean 的别名。它用于声明变量来存储布尔值 true 和 false
如果你的示例正确,应该Boolean 是bool的别名
bool是系统内置的,Boolean是在System空间定义的(bool别名)
哈哈,空军也用中式英语,isNotOK
bool 关键字是 System.Boolean 的别名。
System.Boolean 是 .NET 类库中的一个类(确切地说是结构,struct),是 .NET 各语言通用的,不限于 C#,在 VB.NET、C++.NET、Dephi.NET、... 中都能使用。而 bool 是 C# 语言为 .NET 类库中通用类型 System.Boolean 起的别名,为了方便使用,少敲几个字符,或者为了和 Java 看起来更像些。
内置类型表(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;
Boolean, String, Int32这些叫做引用类型(Reference Type)那么,很自然地,你们的下一个问题就是值类型和引用类型的区别在哪.....
前人写了一篇文章,大家可以观摩一下
http://www.albahari.com/valuevsreftypes.aspx粗略地说,值类型是存在内存的stack 中(即堆栈),而引用类型存在heap(即堆)那么你可以更粗略地认为放在stack 中会快一些,因为heap是程序运行时动态生成的,实际上class都是在run-time的时候生成放在heap的。。这也是一个早期的“罪状”说java很慢,因为所有东西在java里都是对象时至今日随着编译器的优化、硬件的升级。。其实无所谓快慢了除非是在很特殊的环境,例如移动设备上的编程基本上。。这种效率的差别可以忽略
public struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool>
所有的值类型在c#里都不超过16 bytes,除了string
实际上,string就是String,严格来说string并不是值类型因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntax sugar),所以msdn上会说string是String的别名所以会造成很多人误会。。以为其他的值类型都是别名
虽然你是星星,我还是要反抗一下 呵呵~~ 这个也是我引用的其他牛人的说法,不知道对不对,给你PK一下.虽然是string与String但是原理相同.
string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色)
c# string映射为.net Framework的String
如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作
应该是:bool, System.Boolean, int, System.Int32 这些叫做值类型(value type)
string, System.String 叫做引用类型(Reference Type)bool 就是 .NET类型 System.Boolean 在 C# 中的别名。
确实不存在c#中的类和.net Framework的类这种说法,只能说 System.String 是 .NET 中的类,string 是其在 C# 中的别名。
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的区别最后,对某些人或有意或无意动不动就下无稽定论的态度表示遗憾。。不见得技术分高的就可以横着走路
typeof(int).IsClass是false
bool 是 C# 语言为Boolean 起的别名.
请问,
第一行,string 叫做值类型,这正确吗?
第二行,Boolean, Int32这些叫做引用类型,这正确吗?难道不是无稽之谈吗?
The bool keyword is an alias of System.Boolean. It is used to declare variables to store the Boolean values, true and false
任何事情都不能说的太死,留有余地,一起讨论嘛. MVP说的还是比较有信服力. ~.~
输出System.ValueTypesizeof(System.Boolean)输出是1
觉得上面可以说明System.Boolean是值类型
不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚.
(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时候把bool转换成Boolean的话,从这个角度考虑,那效率肯定会高一点. ~.~
编译生成的IL代码是一样,没有区别的,所以说不存在快慢问题。不信你自己用 ILDASM 看一下就知道了。
{
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 是一样的,无区别的,不存在快慢问题。
我也不太清楚 只知道bool 是 Boolean的引用
Boolean是对像 仅此而已
遇到各位高手 正好学习一下!