成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

理解C# String類型:特殊的引用類型

開發(fā) 后端
C# String類型是值類型還是引用類型?一句話總結就是,它是特殊的引用類型。本文對于這個概念進行了比較詳細的解答。

有關C# String類型究竟是值類型還是引用類型,在很多C#學習者中都或多或少造成過困惑。好比下面這個例子:

  1. class Class1   
  2. {   
  3.     static void StrChange(string str)   
  4.     {   
  5.       str = "hellow";   
  6.     }   
  7.  
  8.     static void Main()   
  9.     {   
  10.       string str = "123";//申明一個字符串   
  11.       StrChange(str);//調用方法   
  12.       Console.WriteLine(str);//輸出字符串   
  13.     }   
  14. }   

輸出的結果是 "123" 。

那么,string 到底是值類型還是引用類型?有人會說,如果是值類型,結果倒還說的過去.但是string 的定義不是應該是引用類型么?如果是引用類型的話.輸出的結果難度不應該是: "hellow"么?

解答這個問題的關鍵在于,C# string類型是特殊的引用類型,它的實例是只讀的。這個地方要搞清楚語法和實現(xiàn)的區(qū)別 。在C#的語法中,

◆static void StrChange(string str) 是值傳遞

◆static void StrChange(ref string str) 是引用傳遞

但在實現(xiàn)上,static void StrChange(string str) 這種值傳遞,在函數(shù)體內對str進行修改之前,與函數(shù)外部的變量指向同一塊內存,是“引用”傳遞,但在函數(shù)體內對str修改后,就會觸發(fā)對該str重新分配一塊內存。

所以說,String 是引用類型,不過是不可變的。對字符串做一些操作(比如大小寫的轉換、+=), 實際上是重新創(chuàng)建了一個字符串。這也是為什么在做大量字符串拼接的時候要使用StringBuilder 而不用+=。

有關C# String類型做為引用類型的特別之處,可以參看下例的示例及注釋:   

  1. private void button2_Click(object sender, EventArgs e)   
  2.       {   
  3.           string str="aaa";   
  4.  
  5.           string str1 = str;   
  6.           str = "bbb";//注釋掉此名就"yes",否則"no".這就說明str重新賦值的時候,   
  7.           //其實是重新創(chuàng)建了一個名為str的字符串(內存中指向的位置是不同的),先前   
  8.           //的那個str你就再也看不到了.   
  9.           string str2 = str;   
  10.         
  11.             
  12.           
  13.           if (object.ReferenceEquals( str1,str2))   
  14.           {   
  15.               MessageBox.Show("yes");   
  16.           }   
  17.           else   
  18.           {   
  19.               MessageBox.Show("no");   
  20.           }   
  21.       }  

最后回到一開始的那段代碼。如果想下面這樣編寫:

  1. class Class1   
  2. {   
  3.       
  4.     static string StrChange(string str)   
  5.     {   
  6.       str = "hellow";   
  7.         return str;   
  8.     }   
  9.     static void Main()   
  10.     {   
  11.         string str = "123";//申明一個字符串   
  12.         str=StrChange(str);//調用方法   
  13.         Console.WriteLine(str);//輸出字符串   
  14.     }   
  15.       
  16. }  

這樣輸出的便是hellow了。

【編輯推薦】

  1. 關于interface繼承來源的討論
  2. C#顯式實現(xiàn)接口原理淺析
  3. C# interface學習經驗淺談
  4. C# interface使用實例分析
  5. 淺析abstract class和interface的不同
責任編輯:yangsai 來源: CSDN論壇
相關推薦

2009-08-19 16:39:44

C#值類型C#引用類型

2009-08-14 17:09:48

C#引用類型

2009-08-26 14:05:19

C#值類型和引用類型

2009-09-03 16:55:58

C#引用類型

2009-08-06 10:14:15

C#引用類型數(shù)組

2009-08-03 17:51:43

C#引用類型

2009-09-11 11:09:36

C#引用類型

2009-09-11 11:17:04

C#引用類型

2011-06-08 13:03:52

C#值類型引用類型

2013-05-23 17:21:16

C#

2009-08-27 15:47:00

C#數(shù)據(jù)類型string

2009-10-22 18:41:49

CLR VIA C#教

2009-09-01 16:35:55

C#操作String數(shù)

2009-08-10 17:25:58

C#匿名類型

2009-08-31 14:34:46

C#值類型C#結構類型

2009-08-24 13:52:04

C# 泛型約束

2024-10-11 11:54:14

C#編寫異步

2009-08-26 15:46:01

C#匿名類型

2009-08-06 15:30:23

C#類型系統(tǒng)

2021-05-30 07:59:00

String引用類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黄色绿像 | 色999日韩 | 久久精品小视频 | 国产剧情一区 | 玖玖视频网 | 超碰97人人人人人蜜桃 | 99久久婷婷国产综合精品电影 | 免费精品| 国产精品久久久久久久久久久久 | 欧美精品99 | 日本成人免费网站 | 国产1区2区在线观看 | 欧美一级艳情片免费观看 | 欧美在线天堂 | 国产一区二区三区四区三区四 | 日韩欧美在线观看视频 | 一区二区三区亚洲 | 国产aa| 91精品国产色综合久久不卡98口 | 日韩中文在线视频 | 中国三级黄色录像 | 天天拍天天操 | 91亚洲精品在线 | 九九九国产 | 日本亚洲一区 | 欧美日韩国产在线 | 福利电影在线 | 国产成人一区二区三区电影 | 日韩伦理电影免费在线观看 | 国产成人精品免高潮在线观看 | 男女国产视频 | 国产福利在线看 | 亚洲a一区 | 美女视频一区二区 | 亚洲高清在线免费观看 | 国产福利在线免费观看 | 国产精品3区 | 成人国产精品久久久 | 精彩视频一区二区三区 | 久久久久国产一级毛片高清网站 | 午夜影院在线观看免费 |