Ram*_*Ram 64 .net c# vb.net string primitive-types
我很好奇字符串和原始类型.像这样的文章说字符串是原始类型.但是MSDN上的第二篇文章没有将字符串列为基本类型.
但是,当我运行第二篇文章中提供的代码时,它显示String不是Primitive类型.
任何人都可以指导我吗?
Fed*_*rne 44
两篇文章都说字符串不是原始类型.它不是.
如果您编译并运行第二篇文章中的示例代码,它将打印:
string不是原始类型.
我认为对此的困惑是,创建新字符串的语法类似于创建值类型.
定义值类型时,所有这些都是相同的(无论如何,在32位系统上)
System.Int32 a = new System.Int32(5);
System.Int32 a = 5;
int a = 5;
Run Code Online (Sandbox Code Playgroud)
就像创建引用类型字符串时一样:
System.String s = new System.String(new char[]{'h', 'e', 'l', 'l', 'o'});
System.String s = "hello";
string s = "hello";
Run Code Online (Sandbox Code Playgroud)
我们也可以按值比较字符串,即使它们是引用类型:
s == "hello";//true
Run Code Online (Sandbox Code Playgroud)
这仍然不会使字符串成为原始类型.
这个问题的公认答案应该为您提供详细信息.
Jea*_*nal 44
原始类型没有"微软"的定义.
在给定的上下文中只有原始类型的定义.
System.Boolean
System.Byte
System.SByte
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.IntPtr
System.UIntPtr
System.Char
System.Double
System.Single
System
命名空间的情况下使用该类型),这是一种定义该类型实例的方法用文字; 并允许使用这些类型作为常数; 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.Double
System.Decimal
System.Boolean
System.DateTime
(Date
)System.Char
System.String
C#规范(版本4)定义了某些类型的关键字别名,并定义了为某些值指定文字的方法; 它还单独定义了常量表达式中可用的类型; 与C#具有的"原始类型"最接近的概念在4.1.4节:简单类型中.("原始"一词仅在600页文件中使用两次); 这些原始类型简单地定义为"在C#中具有关键字别名的值类型" - string
在该部分中未提及:
System.SByte
(sbyte
)System.Byte
(byte
)System.Int16
(short
)System.UInt16
(ushort
)System.Int32
(int
)System.UInt32
(uint
)System.Int64
(long
)System.UInt64
(ulong
)System.Char
(char
)System.Single
(float
)System.Double
(double
)System.Boolean
(bool
)System.Decimal
(decimal
)你会发现所有这些事情之间只有部分重叠; CLR将两种指针类型视为原始类型,VB.NET和C#都将十进制视为原始/简单类型,只有VB.NET将DateTime视为特殊的,VB.NET和C#都有一个关键字别名和字符串的字面语法但只有VB.NET指定String
为"原始类型",而C#只有一部分规范专用于System.String
......
总之:不同的上下文对"原始类型"的定义有不同的定义.没关系 - 只是学习如何使用你的编程语言,在战斗和思考这些多态词时没有任何意义.就个人而言,我想知道为什么财产Type.IsPrimitive
甚至存在.
至于System.String
:
String
是它自己非常特别的雪花;Gis*_*shu 10
更改立场更新:否,因为代码不存在
Console.WriteLine(typeof(string).IsPrimitive); => False
Console.WriteLine(typeof(int).IsPrimitive); => True
Run Code Online (Sandbox Code Playgroud)
-----更新结束.
但是在线的一些文档似乎将String视为原语.我认为是 - 基于以下"原始"的定义.(我的个人定义是一种不能进一步细分为组件类型的类型.但我想我们这里只是'迂腐',对我来说这绝对不是问题.)
C#中的所有原始数据类型都是System命名空间中的对象.对于每种数据类型,都提供了短名称或别名.
来源:http://msdn.microsoft.com/en-us/library/ms228360%28VS.80%29.aspx 另一篇赞成的文章 - MSDN Mag文章
总结:我猜答案取决于你对原语的定义,这个定义并没有明确定义.来源:Eric Lippert在另一个SO线程上.
.NET定义(来自您的文章):
基元类型是布尔,字节,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Char,Double和Single.
所以不行.内置且非常重要:是的,但不是原始的.
VB对CLI和C#的定义略有不同.
归档时间: |
|
查看次数: |
49461 次 |
最近记录: |