C# 字符串是基本类型吗?
我对字符串和基本类型很好奇。冠词like表示字符串是基元类型。但是,在MSDN上,未将字符串列为基本类型 但是,当我运行第二篇文章中提供的代码时,它显示字符串不是基元类型C# 字符串是基本类型吗?,c#,.net,vb.net,string,primitive-types,C#,.net,Vb.net,String,Primitive Types,我对字符串和基本类型很好奇。冠词like表示字符串是基元类型。但是,在MSDN上,未将字符串列为基本类型 但是,当我运行第二篇文章中提供的代码时,它显示字符串不是基元类型 有谁能告诉我这一点吗?两篇文章都说string不是一种原始类型。事实并非如此 如果编译并运行第二篇文章中的示例代码,它将打印: 字符串不是基元类型 我认为关于这一点的困惑在于,创建新字符串的语法类似于创建值类型 定义值类型时,所有这些值都相等(在32位系统上) 创建引用类型字符串时,如下所示: System.String s
有谁能告诉我这一点吗?两篇文章都说string不是一种原始类型。事实并非如此 如果编译并运行第二篇文章中的示例代码,它将打印: 字符串不是基元类型 我认为关于这一点的困惑在于,创建新字符串的语法类似于创建值类型 定义值类型时,所有这些值都相等(在32位系统上) 创建引用类型字符串时,如下所示:
System.String s = new System.String(new char[]{'h', 'e', 'l', 'l', 'o'});
System.String s = "hello";
string s = "hello";
我们还可以按值比较字符串,即使它们是引用类型:
s == "hello";//true
这仍然不会使字符串成为基本类型
对此的公认答案应该会提供详细信息。.NET定义(来自您的文章):
基本类型有布尔型、字节型、SByte型、Int16型、UInt16型、Int32型、UInt32型、Int64型、UInt64型、Char型、Double型和Single型
所以,不。内在的,非常重要的:是的,但不是原始的
VB使用了与CLI和C稍有不同的定义。立场更改更新:否,因为代码不存在
Console.WriteLine(typeof(string).IsPrimitive); => False
Console.WriteLine(typeof(int).IsPrimitive); => True
-----更新结束。但一些在线文档似乎将字符串视为原语。我认为是的——基于以下“原始”的定义。(我个人的定义是一种不能进一步细分为组件类型的类型。但我想我们只是在“迂腐”,这对我来说基本上不是问题。) C#中的所有基本数据类型都是 系统命名空间中的对象。对于 每个数据类型、短名称或 提供了别名 资料来源: 另一条赞成—— 小结:我想答案取决于你对原语的定义,它的定义并不明确。
来源:否,字符串不是基元类型 但是,它有一些与基元类型相同的特征 该语言支持代码中的字符串文字,因此不必使用
new
关键字显式创建string
实例来获取字符串对象
还支持使用+
运算符连接字符串,编译器将其转换为对String.Concat
方法的调用
字符串是不可变的,这意味着它在大多数情况下都具有值类型语义,就像基元类型一样。字符串是一种特殊的基元类型。它不是值类型,但可以被视为基元类型,因为它可以通过编写文本来创建,例如/“hello”,并且可以声明字符串类型的常量。话虽如此,IsPrimitive的值返回false
Console.WriteLine("hello".GetType().IsPrimitive) // output = False
编辑:我想在这里收回我的答案。从技术上讲,它不是一个基元类型,但与我上面提到的属性相同。在c#中,这些类型主要定义为两种类型:值类型和基元类型
首先请参见C#中基本类型的定义
另一方面,所有原始数据
C#中的类型是系统中的对象
命名空间。对于每种数据类型,一个简短的
提供了名称或别名。对于
例如,int是
System.Int32和double是最短的
系统的形式
现在,请阅读本文,了解其中的区别:
System.String
映射到“String
”,这是CLI中的基本类型。但在现实中,值类型是堆栈中的类型,而不是堆空间中的类型
因此,关键是值类型与基本类型的对比。根据微软对原语的定义,它是一种原语类型,但在更一般的意义上,它不是。它们不是,因为它们是字符序列。根据微软对“原语”的定义,字符串不被视为原语类型。另一方面,Microsoft倾向于使用术语,而没有真正制定明确或一致的定义(例如“非托管资源”),并且可以有效地定义“基元”以包括“字符串”、“数组”和“对象”,因为如果没有这些基元,就无法定义可以有效模拟它们的类型。“Microsoft”对基元类型的定义 给定上下文中只有基元类型的定义
- 将基元类型定义为以下类型:
System.Boolean
System.Byte
System.SByte
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.IntPtr
System.uintpttr
System.Char
System.Double
System.Single
- VB.NET规范版本10(第7.3节)将“基本类型”定义为具有类型的关键字别名的类型(因此允许在不导入
命名空间的情况下使用该类型),一种使用文本定义该类型实例的方法;并允许将这些类型用作常量;VB.NET中的基元类型有:系统
System.Byte
System.SByte
(System.UInt16
)UShort
(System.Int16
)Short
(System.UInt32
)UInteger
(System.Int32
)Integer
(System.UInt64
)ULong
(System.Int64
)Long
System.Single
System.Doubl
Console.WriteLine("hello".GetType().IsPrimitive) // output = False