.NET/C# 中的字符串类型
2010-01-21 00:36
253 查看
1:在.NET中,当你定义一个字符串时,通常的情况是系统为你在栈中分配一个变量,这个变量中有一个地址,这个地址指向堆中一块区域,在这儿,放着你定义的那个字符串,当你将这个字符串变量赋一个新值的时候,存放以前字符串的内存块并不发生变化,系统会新分配一块内存,放入你指定的新值,然后将这个新地址放在以前在栈中的那个变量,也就是那个引用型的字符串类的对象中。
那么旧的那块内存区域呢?就会保留在那儿,但你再也无法使用它,直到某个特定时刻,它会被GC标记为可用,完成回收。
2:另外要注意,在.NET中,尽管字符串类-String,也就是System.String类,是一个引用型的类型,但是在对字符串进行比较时,却进行的是跟值类型一样的等价比较,也就是说比的是它们指向的那块内存了中的内容,而不是两个地址值。这样的设计是因为字符串类的特殊性,再自然不过了。
3:还有,因为.NET构架下的字符都采用的是双字节的UNICODE编码,所以由字符构成的字符串自然就是一串UNICODE编码序列。
4:在C++中会用一个字节表示的0用来标志字符串的结束,.NET中的字符串不再有这个要求,字符串完全不用考虑后面的什么0了。
5:.NET/C#中,String类是一个sealed类,也就是说,它不允许被拿去继承出新类来!
6:同C++一样,字符串常量中可以用‘\’转义符,但是.NET提供了一个额外的功能,就是在字符串常量前面加一个@,来表示串中不考虑转义,甚至换行都原照原的能搬到屏幕上,如下:
它的输出结果为:
7:面对一个字符串,我们可能会想从这个字符串中查找一个特定的字符或子串,或者想按要求取其中一个子串,或者想拿它跟另一个字符串进行比较,或者想将它跟另一个字符串拼接,或者想将这个字符串按某种规则进行排序,更常见的还有要求这个字符串的长度,也就是它当中字符的个数,或者还想将串内字符统一为大写,或者统一为小写,等等。。。那么就来看看.NET框架类库提供的String类型够不够强大。
(1):
public int Length { get; }
一定要注意,这个Length是一个属性而不是方法,你要是写一个:Console.Writeline(str.Length()); 出来,是要报编译错的,
而应该写成: Console.Writeline(str.Length);这样才对。
注意,这儿的 Length 属性是 只读的!!!而 StringBuilder 的 Length 是可读可写的,当改变StringBuilder类型变量的Length时,会发生截断,或者补长动作!
(2):额,看这个。。。。。
我还是自个熟悉一下各个函数,到时用到的时候再来查吧,,,,,不用看了,MS很强大,.NET/C#很强大。。。。。。
8:字符串的格式化输出。这个跟C语言中的printf中的'%d'之类的东西功能差不多,但.NET/C#的实现更方便好用一些。有一个String.Format()方法专门来做这个事情。之强大。。。
9:除了不能改变实例内容的String类以外,.NET/C#还提供了一个System.Text.StringBuilder类,这个以后再细看。
那么旧的那块内存区域呢?就会保留在那儿,但你再也无法使用它,直到某个特定时刻,它会被GC标记为可用,完成回收。
2:另外要注意,在.NET中,尽管字符串类-String,也就是System.String类,是一个引用型的类型,但是在对字符串进行比较时,却进行的是跟值类型一样的等价比较,也就是说比的是它们指向的那块内存了中的内容,而不是两个地址值。这样的设计是因为字符串类的特殊性,再自然不过了。
3:还有,因为.NET构架下的字符都采用的是双字节的UNICODE编码,所以由字符构成的字符串自然就是一串UNICODE编码序列。
4:在C++中会用一个字节表示的0用来标志字符串的结束,.NET中的字符串不再有这个要求,字符串完全不用考虑后面的什么0了。
5:.NET/C#中,String类是一个sealed类,也就是说,它不允许被拿去继承出新类来!
6:同C++一样,字符串常量中可以用‘\’转义符,但是.NET提供了一个额外的功能,就是在字符串常量前面加一个@,来表示串中不考虑转义,甚至换行都原照原的能搬到屏幕上,如下:
static void Main(string[] args) { string s1 = @"abc @\n test!"; Console.WriteLine(s1); Console.ReadLine(); }
它的输出结果为:
7:面对一个字符串,我们可能会想从这个字符串中查找一个特定的字符或子串,或者想按要求取其中一个子串,或者想拿它跟另一个字符串进行比较,或者想将它跟另一个字符串拼接,或者想将这个字符串按某种规则进行排序,更常见的还有要求这个字符串的长度,也就是它当中字符的个数,或者还想将串内字符统一为大写,或者统一为小写,等等。。。那么就来看看.NET框架类库提供的String类型够不够强大。
(1):
public int Length { get; }
一定要注意,这个Length是一个属性而不是方法,你要是写一个:Console.Writeline(str.Length()); 出来,是要报编译错的,
而应该写成: Console.Writeline(str.Length);这样才对。
注意,这儿的 Length 属性是 只读的!!!而 StringBuilder 的 Length 是可读可写的,当改变StringBuilder类型变量的Length时,会发生截断,或者补长动作!
(2):额,看这个。。。。。
我还是自个熟悉一下各个函数,到时用到的时候再来查吧,,,,,不用看了,MS很强大,.NET/C#很强大。。。。。。
8:字符串的格式化输出。这个跟C语言中的printf中的'%d'之类的东西功能差不多,但.NET/C#的实现更方便好用一些。有一个String.Format()方法专门来做这个事情。之强大。。。
9:除了不能改变实例内容的String类以外,.NET/C#还提供了一个System.Text.StringBuilder类,这个以后再细看。
相关文章推荐
- .NET/Dot Net学习笔记---.net理解,C#.net的基本类型,字符串转义字符处理..
- C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte
- C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte
- C#.NET WebApi返回各种类型(图片转二进制流或byte /json数据/字符串)
- 【转载】C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte
- asp.net(c#)中分割字符串的几种方法
- c#.net常见字符串处理方法
- c# .net中的类型转换
- 【C#与.NET程序设计】(6)- C#垃圾回收及接口类型
- asp.net(c#)字符串转换成字符数组 字符串转换成int 数组
- [学习笔记]Asp.net(C#)菜鸟进级系列之引用类型
- C#语言之“string格式的日期时间字符串转为DateTime类型”的方法
- C# asp.net中常见的字符串处理函数及数字格式化
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- C#(ASP.NET)DateTime日期类型格式化显示 (转载)
- <NET CLR via c# 第4版>笔记 第14章 字符,字符串和文本处理
- .net C# VB oracle 连接字符串大全
- C#类型与.net Framework类型
- C#-ADO.Net连接池和连接字符串剖析
- C# 枚举类型转换字符串 Enum to string,枚举转换为下拉菜单 Enum DropDownList