表示文本,即一系列 Unicode 字符。算法
命名空间:System
程序集:mscorlib(在 mscorlib.dll 中) 数组
C# 安全
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class String : IComparable, ICloneable, IConvertible,
IComparable<string>, IEnumerable<string>, IEnumerable,
IEquatable<string>多线程
字符串是 Unicode 字符的有序集合,用于表示文本。String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,而且该值是不可变的。 oop
String 对象称为不可变的(只读),由于一旦建立了该对象,就不能修改该对象的值。看来彷佛修改了 String 对象的方法其实是返回一个包含修改内容的新 String 对象。若是须要修改字符串对象的实际内容,请使用 System.Text.StringBuilder 类。 测试
字符串中的每一个 Unicode 字符都是由 Unicode 标量值定义的,Unicode 标量值也称为 Unicode 码位或者 Unicode 字符的序号(数字)值。每一个码位都是使用 UTF-16 编码进行编码的,编码的每一个元素的数值都用一个 Char 对象表示。 ui
一个 Char 对象一般表示一个码位,即:Char 的数值等于该码位。可是,一个码位可能须要多个编码元素。例如,Unicode 辅助码位(代理项对)使用两个 Char 对象来编码。 编码
String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每一个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息,请参见 CultureInfo.CurrentCulture 主题。 线程
大小写规则决定如何更改 Unicode 字符的大小写,例如,从小写变为大写。 代理
格式化规则决定如何将值转换为它的字符串表示形式,而语法分析规则则肯定如何将字符串表示形式转换为值。
排序规则肯定 Unicode 字符的字母顺序,以及两个字符串如何互相比较。例如,Compare 方法执行语义比较,而 CompareOrdinal 方法执行序号比较。所以,若是当前的区域性为美国英语,则 Compare 方法认为“a”小于“A”,而 CompareOrdinal 方法会认为“a”大于“A”。
.NET Framework 支持单词、字符串和序号排序规则。单词排序会执行区分区域性的字符串比较,在这种比较中,某些非字母数字 Unicode 字符可能会具备特殊的权重。例如,连字符(“-”)的权重很是小,所以“coop”和“co-op”在排序列表中是紧挨着出现的。字符串排序与单词排序类似,只是全部非字母数字符号均排在全部字母数字 Unicode 字符前面,没有特例。
区分区域性的比较是显式或隐式使用 CultureInfo 对象的任何比较,包括由 CultureInfo.InvariantCulture 属性指定的固定区域性。当前隐式区域性由 Thread.CurrentCulture 属性指定。
序号排序基于字符串中每一个 Char 对象的数值对字符串进行比较。序号比较自动区分大小写,由于字符的小写和大写版本有着不一样的码位。可是,若是大小写在应用程序中并不重要,则能够指定忽略大小写的序号比较。这至关于使用固定区域性将字符串转换为大写,而后对结果执行序号比较。
有关单词、字符串和序号排序规则的更多信息,请参见 System.Globalization.CompareOptions 主题。
区分区域性的比较一般适用于排序,而序号比较则不适合。序号比较一般适用于肯定两个字符串是否相等(即,肯定标识),而区分区域性的比较则不适用。
比较和搜索方法的“备注”指定方法是区分大小写、区分区域性仍是二者区分。根据定义,任何字符串(包括空字符串 (""))的比较结果都大于空引用;两个空引用的比较结果为相等。
某些 Unicode 字符具备多个等效的二进制表示形式,这些表示形式中包含几组组合的和/或复合的 Unicode 字符。Unicode 标准定义了一个称为规范化的过程,此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可以使用多种遵循不一样规则的算法执行规范化,这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。一般用序号比较来评估一对规范化的字符串。
若是应用程序进行有关符号标识符(如文件名或命名管道)或持久数据(如 XML 文件中基于文本的数据)的安全决策,则该操做应该使用序号比较而不是区分区域性的比较。这是由于根据起做用的区域性的不一样,区分区域性的比较可产生不一样的结果,而序号比较则仅依赖于所比较字符的二进制值。
String 类提供的成员执行如下操做:比较 String 对象;返回 String 对象内字符或字符串的索引;复制 String 对象的值;分隔字符串或组合字符串;修改字符串的值;将数字、日期和时间或枚举值的格式设置为字符串;对字符串进行规范化。
使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法进行比较。
使用 IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可获取字符串中子字符串或 Unicode 字符的索引。
使用 Substring 和 Split 方法可经过原始字符串的组成部分建立一个或多个新字符串;使用 Concat 和 Join 方法可经过一个或多个子字符串建立新字符串。
使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字符串的所有或部分。
使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字符串中 Unicode 字符的大小写。
使用 Format, 可将字符串中的一个或多个格式项占位符替换为一个或多个数字、日期和时间或枚举值的文本表示形式。
使用 Length 属性可获取字符串中 Char 对象的数量;使用 Chars 属性可访问字符串中实际的 Char 对象。
使用 IsNormalized 方法可测试某个字符串是否已规范化为特定的范式。使用 Normalize 方法可建立规范化为特定范式的字符串。
String 类分别用于实现 IComparable、ICloneable、IConvertible、IEnumerable 和 IComparable 接口。使用 Convert 类进行转换,而不是使用此类型的 IConvertible 显式接口成员实现。
System.Object
System.String
该类型对于多线程操做是安全的。(?是由于每次赋值都是建立一个新的引用吗?)