亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

理解C#中的string類型

2019-11-18 19:48:04
字體:
來源:轉載
供稿:網友

       目的

       本文的目的在于揭示和DOTNET及C#相關的一些常見的和不常見的問題。在這些問題中我的第一篇文章和string數據類型有關,string數據類型是一種引用類型,但是當和其他引用類型比較的時候,很多開發人員可能并不能完全理解它的行為。

       問題

       對于常見的引用類型,當改變一個對象別名的值時,這種變化也同樣會在一個實際的對象中表現出來;反之亦然。但是對于string類型,似乎不是這樣的。

       解釋

       引用類型

       假設我們有一個類MyType,這個類有一個屬性Name;我們還有一個類APPType,這個類提供Main()方法來運行這個程序。

       下面,我們來看看代碼:

      

using System;

class MyType

{

     PRivate string name;

     public string Name

     {

         set

         {

              name=value;

         }

         get

         {

              return name;

         }

     }

}

class AppType

{

     public static void Main()

     {

         MyType obj1,obj2;

         Console.WriteLine("*****Learning reference Philosophy*****");

         obj2=new MyType();

         obj2.Name="Sadiq";

         obj1=obj2;

         Console.WriteLine("values of obj1={0} and obj2={1}",obj1.Name,obj2.Name);

         obj1.Name="Ahmed";

         Console.WriteLine("values of obj1={0} and obj2={1}",obj1.Name,obj2.Name);

     }

}
 

       當你編譯并且運行這段代碼時,你將得到如下輸出:

*****Learning reference philosophy*****
values of obj1=Sadiq and obj2=Sadiq
values of obj1=Ahmed and obj2=Ahmed

這表明obj1不過是obj2的別名,換句話說,obj1和obj2都指向同一個內存空間。

值類型

和上面的代碼差不多,不同的是這次我們將MyType定義為類,其他部分都相同,我們先看看代碼:

using System;

struct MyType

{

     private string name;

     public string Name

     {

         set

         {

              name=value;

         }

         get

         {

              return name;

         }

     }

}

class AppType

{

     public static void Main()

     {

         MyType obj1,obj2;

         Console.WriteLine("*****Learning reference Philosophy*****");

         obj2=new MyType();

         obj2.Name="Sadiq";

         obj1=obj2;

         Console.WriteLine("values of obj1={0} and obj2={1}",obj1.Name,obj2.Name);

         obj1.Name="Ahmed";

         Console.WriteLine("values of obj1={0} and obj2={1}",obj1.Name,obj2.Name);

     }

}
 

       我們再來看看上面代碼運行后的輸出:

*****Learning reference philosophy*****
values of obj1=Sadiq and obj2=Sadiq
values of obj1=Ahmed and obj2=Sadiq

這表明obj1和obj2并不相同,也就是說,他們指向不同的內存空間。

引用類型還是值類型?
現在,讓我們看看直接使用string類型的情況:

using System;

class AppType

{

     public static void Main()

     {

         String obj1,obj2;

         Console.WriteLine("*****Learning reference philosophy*****");

         //No need of it

         //obj2=new MyType();

         obj2="Sadiq";

         obj1=obj2;

         Console. WriteLine("values of obj1={0} and obj2={1}",obj1,obj2);

         obj1="Ahmed";

         Console.WriteLine("values of obj1={0} and obj2={1}",obj1,obj2);

     }

}
 

當你運行這段代碼,你會得到:

*****Learning reference philosophy*****
values of obj1=Sadiq and obj2=Sadiq
values of obj1=Ahmed and obj2=Sadiq

這表明obj1并不是obj2的別名,即obj1和obj2指向不同的內存空間。

非常奇怪!確實!我們都知道string類型是動態增長的,這表明它必須在堆上分配內存。我們都知道引用類型都在堆上分配內存,那么string類型也應該是引用類型,那么為何它又表現出和值類型一樣的性質呢?

原因
關鍵在于如下的兩行代碼中:

string obj1;
obj1 = “value forces to allocate a memory”;

第一行代碼僅僅是定義了一個對象,并不會創建一個對象;第二行代碼才會真正創建一個對象。這意味著你也可以將第二行代碼寫成:

obj=new string(“value forces to allocate a memory”);.

總結

因此,當你初始化一個string對象的值或是賦予一個新的字符串給它的時候都將在內存中創建一個新的對象?,F在,我們應該明白了第三個例子中的obj1并不是obj2的別名,他們指向不同的內存空間。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产鲁一鲁一区二区张丽| 在线播放国产一区中文字幕剧情欧美| 国产精品va在线播放我和闺蜜| 亚洲码在线观看| 亚洲免费人成在线视频观看| 久久青草精品视频免费观看| 亚洲视频一区二区| 国产精品揄拍一区二区| 久久综合伊人77777| 久久精品福利视频| 色综合色综合久久综合频道88| 高清在线视频日韩欧美| 在线观看欧美日韩国产| 在线播放日韩专区| 日韩av免费在线看| 国产精品劲爆视频| 欧美日韩国产成人| 亚洲深夜福利网站| 久久人体大胆视频| 亚洲精品v天堂中文字幕| 欧美精品日韩www.p站| 亚洲成人性视频| 久久精品成人动漫| 国产一区二区三区在线视频| 亚洲综合一区二区不卡| 黄色精品一区二区| 狠狠色狠狠色综合日日小说| 国产精品成人av在线| 亚洲精品av在线| 中文字幕亚洲欧美| 国产精品老女人视频| 欧美性做爰毛片| 精品一区二区三区四区| 国产美女精彩久久| 欧美精品一区三区| 国产精品爽爽爽爽爽爽在线观看| 久久久久久综合网天天| 国产精品一区二区久久久久| 亚洲精品第一国产综合精品| 亚洲第一av网| 亚洲影视中文字幕| 欧美另类老女人| 久久精品亚洲精品| 日本乱人伦a精品| 国产精品视频白浆免费视频| 97精品久久久中文字幕免费| 亚洲性日韩精品一区二区| 91成人国产在线观看| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩亚洲激情| 国产视频一区在线| 91精品视频在线看| 国产精品午夜一区二区欲梦| 亚洲欧美在线一区| 亚洲视频自拍偷拍| 欧美激情性做爰免费视频| 精品国产乱码久久久久久婷婷| 久久影院模特热| 日本欧美一级片| 亚洲一区二区三区久久| 日韩欧美中文第一页| 亚洲国产精久久久久久| 亚洲视频在线观看视频| 亚洲成人三级在线| 国产精品专区h在线观看| 国产成+人+综合+亚洲欧美丁香花| 久久精品影视伊人网| 国产91色在线|| 日韩欧美国产高清91| 国产不卡av在线免费观看| 国产精品一区二区av影院萌芽| 一区二区三区久久精品| 亚洲成人教育av| 欧美午夜视频在线观看| 精品无人国产偷自产在线| 91高清视频在线免费观看| 国产成人福利网站| 九九久久综合网站| 色综合导航网站| 亚洲欧洲日产国码av系列天堂| 久久精品亚洲94久久精品| 66m—66摸成人免费视频| 国模吧一区二区三区| 九九久久精品一区| 97在线观看免费| 亚洲欧洲在线视频| 国产精品一区二区三区久久久| 国产精品99久久久久久www| 国产一区二区三区视频| 中文字幕亚洲综合久久| 96精品久久久久中文字幕| 国产精品视频最多的网站| 日韩最新av在线| 91九色蝌蚪国产| 日韩中文字幕在线视频| 亚洲福利视频免费观看| 狠狠躁天天躁日日躁欧美| 国产精品亚洲综合天堂夜夜| 欧美日韩中国免费专区在线看| 91精品国产亚洲| 中文字幕精品www乱入免费视频| 亚洲精品福利免费在线观看| 奇米影视亚洲狠狠色| 国产精品亚洲视频在线观看| 日韩乱码在线视频| 久久天天躁狠狠躁夜夜躁| 亚洲无限av看| 久久免费观看视频| 黑人狂躁日本妞一区二区三区| 久久久久久久久久久av| 亚洲三级 欧美三级| 欧美三级xxx| 成人欧美在线观看| 欧美日韩中文字幕在线| 国产亚洲视频在线观看| 成人在线一区二区| 午夜精品三级视频福利| 午夜精品美女自拍福到在线| 欧美福利视频在线| 国内精品视频久久| 欧美成人免费全部观看天天性色| 91精品久久久久久| 色悠久久久久综合先锋影音下载| 欧美美最猛性xxxxxx| 亚洲福利视频免费观看| 最近日韩中文字幕中文| 91伊人影院在线播放| 亚洲精品乱码久久久久久金桔影视| 亚洲欧洲高清在线| 日韩av一卡二卡| 日韩精品在线影院| 精品人伦一区二区三区蜜桃网站| 亚洲福利视频免费观看| 欧美在线视频一区| 精品亚洲永久免费精品| 欧美高跟鞋交xxxxxhd| 亚洲 日韩 国产第一| 国产视频久久久| 亚洲高清色综合| 成人综合网网址| 亲爱的老师9免费观看全集电视剧| 日本精品视频在线观看| 日韩精品亚洲精品| 中文字幕在线日韩| 欧美中文字幕在线播放| 久久在线免费观看视频| 影音先锋日韩有码| 中文字幕亚洲专区| 亚洲2020天天堂在线观看| 日本a级片电影一区二区| 国产综合在线观看视频| 亚洲国产精彩中文乱码av在线播放| 色与欲影视天天看综合网| 搡老女人一区二区三区视频tv| 超在线视频97| 亚洲石原莉奈一区二区在线观看| 亚洲国产精品资源| 成人免费福利在线| 成人在线一区二区| 亚洲毛片一区二区| 国产一区二区三区在线免费观看| 亚洲成年人在线播放| 亚洲欧美另类中文字幕| 欧美日韩免费区域视频在线观看|