C# string特殊引用类型

简介: 一、string的确是引用类型 常规上是这样定义的:     string是引用类型,但是其又具有值类型的一些特性。   static void Main(string[] args) ...

一、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.         }


image

图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#提供了一种新的机制,使用”@”.在”@”后的字符串都看作是原意,不会解释为转义字符串.并且以”@”开头的字符串支持回车换行的显示方式(见下例).不过会增加到字符串长度,不推荐过多使用.


image
图2



image
图3


 

参考并修改博客:

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

相关文章
|
7月前
|
C#
51.c#:string类的静态方法
51.c#:string类的静态方法
181 1
|
6月前
|
存储 Java C#
C# 中的值类型与引用类型:内存大小解析
C# 中的值类型与引用类型:内存大小解析
|
6月前
|
存储 安全 Java
程序与技术分享:C#值类型和引用类型的区别
程序与技术分享:C#值类型和引用类型的区别
50 0
|
3月前
|
存储 Java C#
C# 中的值类型与引用类型
在 C# 编程中,值类型和引用类型的区别至关重要,直接影响内存管理、性能优化及编程模式选择。值类型直接存储数据(如 `int`、`float`),而引用类型存储数据的引用地址(如 `class`、`string`)。值类型的赋值涉及数据复制,适合小数据量;引用类型仅复制引用,适合大数据量处理但需关注垃圾回收。本文通过具体代码示例详细解析二者的定义、存储方式及性能影响,并提供实战案例分析及易错点避免方法,帮助读者更好地理解和应用。
83 2
|
存储 C# 图形学
代码解析 C# 引用类型还是值类型
代码解析 C# 引用类型还是值类型
|
自然语言处理 C# 数据格式
C#OOP之十五 String类&StringBuilder类
C#OOP之十五 String类&StringBuilder类
44 0
|
存储 C# C语言
C# OOP之五 深入理解值类型和引用类型
C# OOP之五 深入理解值类型和引用类型
46 0
|
7月前
|
自然语言处理 C# 数据安全/隐私保护
50.c#:string类初始化
50.c#:string类初始化
258 1
|
7月前
|
开发框架 .NET C#
C# Dictionary<string, string> 对key做筛选
C# Dictionary<string, string> 对key做筛选
77 2
|
7月前
|
C#
深入C#中的String类
深入C#中的String类