Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NET中真正的字符串是什么?_.net_String - Fatal编程技术网

.net NET中真正的字符串是什么?

.net NET中真正的字符串是什么?,.net,string,.net,String,字符串实际上是一个字符数组(Is-a),还是它有一个字符数组作为内部存储(has-a),或者它自己的对象可以用一个字符数组将自己暴露为一个数组 我更倾向于说它是它自己的对象,但为什么我们总是说“字符串是字符数组…”呢 :字符串类型表示Unicode字符的字符串 这意味着:它是一个Unicode字符数组。字符串的语义是第二位的 Net字符串类维护一个内部存储(has-a),并可以按照设计者选择的多种抽象方式公开该存储 这个问题就像“苹果是一个红色的圆形东西吗?因为我一直认为它是一个水果。”以一种抽

字符串实际上是一个字符数组(Is-a),还是它有一个字符数组作为内部存储(has-a),或者它自己的对象可以用一个字符数组将自己暴露为一个数组

我更倾向于说它是它自己的对象,但为什么我们总是说“字符串是字符数组…”呢

:字符串类型表示Unicode字符的字符串


这意味着:它是一个Unicode字符数组。

字符串的语义是第二位的

Net字符串类维护一个内部存储(has-a),并可以按照设计者选择的多种抽象方式公开该存储

这个问题就像“苹果是一个红色的圆形东西吗?因为我一直认为它是一个水果。”

以一种抽象的方式(我猜,当放在记忆中时),它是一个字符数组


请纠正我的错误。

这取决于你对“字符串”一词的定义

System.String
type in.NET有一个字符数组作为内部存储(例如,它还存储长度(即O(1)))

但单词string通常表示某个连续出现的内容,也可能表示一个字符数组:))


顺便说一下,当我说
string
type有一个“字符数组”时,我并不是特别指“类型为
char[]
的字段”。我指的是术语“数组”的一般含义,它是一个有序的集合

String是类的名称。它在不同的语言中有不同的含义。它内部可以是unicode或ASCII,这意味着它的存储机制是一系列字节。这个类提供了操作它自己的内部存储的函数,并且由于它可能包含各种不同编码的字符,所以不能直接访问和修改它。因此,就您的问题而言,它有一个字节存储。

这取决于语言和实现。在最基本的级别(ascii字符*字符串)上,它是一系列连续的内存地址,每个地址都包含一个与ascii代码相对应的短整数,并以null(字符(0))终止。大多数高级语言都提供了一个字符串对象,该对象具有字符数组和方便的方法,因为使用char*字符串或多或少是一件麻烦事。

NET字符串不仅仅是一个字符数组。它包含一个字符数组,所以严格地说,它是has-a


此外,还有许多与Unicode相关的微妙之处,它的行为与数组完全不同。连接一个字符可能不仅仅是将字符串长度增加1,然后在末尾插入新字符。根据Unicode规范化规则,它实际上可能会更改整个字符串。因此,它绝对不像一个字符数组,但在类中的某个地方,这样的数组是存在的。

取决于您如何看待它。如果用GCHandle固定它,然后查看它所在的内存,就会发现它实际上是一个32位长度的描述符,后跟一个unicode字符数组(请注意,AddRofPindedObject将为您提供第一个字符的地址,而不是长度。如果它提供了长度地址,则P/调用将远没有用处)。

从功能上讲,字符串是字符列表或序列。字符串通常以字符数组的形式透明存储(例如,在C中)数组允许对字符进行方便的随机访问,这对于某些算法很重要

不过,出于其他目的,将Unicode字符串存储为UTF-8可能是最合适的形式。请注意,尽管它存储在字节数组中,但字节和字符之间不再存在一对一的对应关系:字符串算法通常需要从一开始就按序访问字符——作为列表


这个故事的寓意是:你的字符串代码只有在它确实需要的时候才需要随机访问。你可能会惊讶地发现,你真的很少需要一个字符数组。

你为什么要问这个问题?好奇?你面临的一些问题?一个神奇的网络线浸入了一个黏糊糊的字符数组中。请编辑这个问题以提及.NET somew在这里。我根据问号回答。什么样的定义使用定义中定义的术语?:)第一个字符串是关键字的名称,第二个表示“字符串”作为通用术语:)Microsoft定义,我想他们的意思是名为“字符串”的类代表unicode的字符串(字符)…;)我想我可以接受这个答案。我还将以一张笑脸结束这篇评论,因为显然这就是我们应该做的事这是微软的官方答案:如果你读了这个问题,并且实际上意味着它取决于哪种“.Net”语言,那么你错了。。。它不。。。根据.net公共类型系统(CTS)的定义,所有.net字符串(无论使用何种语言)都是相同的。。。