且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C# string特殊引用类型

更新时间:2022-08-31 13:51:50

一、string的确是引用类型

常规上是这样定义的:

    string是引用类型,但是其又具有值类型的一些特性。

 

  1. static void Main(string[] args)
  2.         {
  3.             string str1 = "I am a number";
  4.             string str2 = str1;
  5.             Console.WriteLine("str1 = " + str1);
  6.             Console.WriteLine("str2 = " + str2);

  7.             str1 = "I am another number";
  8.             Console.WriteLine("after str1 changed... str1 = " + str1);
  9.             Console.WriteLine("after str1 changed... str2 = " + str2);

  10.             Console.WriteLine("-------------------------------------------");
  11.             Console.WriteLine(str1);
  12.             Send(str1);

  13.             Console.ReadLine();
  14.         }

  15.         static void Send(string str)
  16.         {
  17.             str = str + "1";
  18.             Console.WriteLine(str);
  19.         }


C# string特殊引用类型

图1

由图1可以总结出下面几点:
1、string的引用特性

(1)引用给引用赋值,是将两个引入都同指向同一片内存,并没有开发新的内存。

    str2=str1,这样大家都指向了”I am a number”所在的内存,并没有新开辟一片内存。

(2)字符串给引用赋值,新开辟了一块内存,并让引用指向该内存。
2、string的值特性说明

(1)、使用引用传参数,是传值调用。

    在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型;
(2)、对一些类对象进行浅拷贝时,string类型也能够被复制。
    主要原因是string类型定义中的一段解释:

  1. // 表示空字符串。此字段为只读。
  2. public static readonly string Empty;


    另外,str1 == str2 ,仅仅是比较了值,而非地址(是MS重写了==运算符所致).

二.  ”@”在string中的用法

       都知道如果要使用转义字符的话,需要在字符前加上”\”,而C#提供了一种新的机制,使用”@”.在”@”后的字符串都看作是原意,不会解释为转义字符串.并且以”@”开头的字符串支持回车换行的显示方式(见下例).不过会增加到字符串长度,不推荐过多使用.


C# string特殊引用类型
图2



C# string特殊引用类型
图3


 

参考并修改博客:

http://www.cnblogs.com/tling091223/archive/2009/12/23/1630338.html