[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考
[2] [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考
[3] [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考
系列文章导航:
[你必须知道的.NET] 第四回:后来居上:class和struct
[你必须知道的.NET] 第五回:深入浅出关键字---把new说透
[你必须知道的.NET] 第六回:深入浅出关键字---base和this
[你必须知道的.NET] 第七回:品味类型---从通用类型系统开始
[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
[你必须知道的.NET] 第九回:品味类型---值类型与引用类型(中)-规则无边
[你必须知道的.NET] 第十回:品味类型---值类型与引用类型(下)-应用征途
[你必须知道的.NET] 第十一回:参数之惑---传递的艺术(上)
[你必须知道的.NET] 第十二回:参数之惑---传递的艺术(下)
[你必须知道的.NET] 第十三回:从Hello, world开始认识IL
[你必须知道的.NET] 第十四回:认识IL代码---从开始到现在
[你必须知道的.NET] 第十六回:深入浅出关键字---using全接触
[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考
[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二
2 欲求思考
欲求思考,则从基本开始,对于理解整个string intern机制是大有裨益的,因此深入的第一步就从基本概念开始。随着我们分析的层层深入,就会发现看似曲折的结果,原来不过如此而已,这正是技术探求的最佳方式。
什么是string
什么是string呢,提起这个问题,我想下面的图例可以给出一点启示:
string在本质上就是一连串的有顺序的字符集合。
简单的说,string就是char[],而在.NET中string头一回具有了类的概念,暗合了.NET一切皆为对象的大一统格局。回归本质,我们重新审视如此另类而多彩的string,你会不禁明白,string本质上就是一个16位Unicode字符数组。打开string的Disassemble代码,我们可直击其本质:
[Serializable, ComVisible(true)]
public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>,
IEnumerable<char>, IEnumerable, IEquatable<string>
{
}
结合string的定义,我们可以看出其基本的特性主要包括:
- 引用类型,string本质上是引用类型,相关内容参考《你必须知道的.NET》 对值类型和引用类型的讨论。
- 字符串恒等性。
- 字符串驻留性,本文的研究重点。
- 密封性,由sealed关键字可见,sealed特性为实现字符串恒等性和字符串驻留机制,提供了基础保证,具体的原因参见《你必须知道的.NET》 关于string的相关论述。
关于这些特性并非本文关注的热点,还有大量的命题值得我们关注,总结起来还可包括:
- 字符串比较:以等价规则而非恒等规则进行比较。
- 常用方法:Trim()、ToLow()、Replace()、Split()、PadRight()、SubString()和Join()
- 格式化。
- 转移字符。
- StringBuilder,另一个重要的话题。
- Encoding,编码。
- Culture & Internationalization,语言文化。
- overloads == ,==重载。
由此可知,string真是一个丰富而多彩的技术仓库,饱含了.NET技术中很多精髓与技巧,我们不可能在本文中尽述其然,更多的论述和分析可以参考以下信息:
快捷参考 |
关,你可以参考:
|
接下来,本文的主题闪亮登场。