亚洲香蕉成人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
一区二区成人av| 成人网在线免费看| 精品二区三区线观看| 清纯唯美日韩制服另类| www.久久草.com| 国产精品黄色av| 亚洲精品欧美一区二区三区| 亚洲激情在线观看| 日韩精品极品视频免费观看| 热久久美女精品天天吊色| 亚洲人成网在线播放| 欧美成人精品一区| 97精品国产97久久久久久春色| 国产va免费精品高清在线观看| 日韩精品中文字幕久久臀| 91欧美精品午夜性色福利在线| 日韩免费在线电影| 欧美大肥婆大肥bbbbb| 精品国产一区二区三区久久久狼| 亚洲欧美制服中文字幕| 麻豆乱码国产一区二区三区| 91精品国产色综合久久不卡98口| 日韩综合中文字幕| 国产精品黄视频| 国产亚洲欧美日韩一区二区| 国产日产亚洲精品| 欧美丝袜一区二区三区| 欧美洲成人男女午夜视频| 成人av.网址在线网站| 亚洲国产精久久久久久| 亚洲免费精彩视频| 国产一区香蕉久久| 这里只有精品在线观看| 欧美插天视频在线播放| 日本sm极度另类视频| 国产精品久久久av久久久| 欧美激情精品久久久久久变态| 亚洲丝袜在线视频| 91色琪琪电影亚洲精品久久| 亚洲一区二区少妇| 国产精自产拍久久久久久蜜| 亚洲精品电影在线观看| 欧美成人免费在线视频| 欧美午夜美女看片| 亚洲精品美女在线| 日韩欧美在线视频观看| 97精品伊人久久久大香线蕉| 亚洲第一精品电影| 亚洲精品电影久久久| 亚州国产精品久久久| 精品国产欧美一区二区五十路| 日韩中文字幕在线视频| 国产精品视频1区| www.xxxx欧美| 日韩中文字幕久久| 亚洲最大的成人网| 久久久av亚洲男天堂| 91免费欧美精品| 亚洲自拍欧美色图| 亚洲图片欧美午夜| 亚洲国产精品电影在线观看| 国产精品999| 日韩成人在线视频网站| 国产精品视频1区| 欧美又大粗又爽又黄大片视频| 色妞欧美日韩在线| 欧美片一区二区三区| 国内精品小视频在线观看| 欧美一区第一页| 国产精品久久久久秋霞鲁丝| 亚洲跨种族黑人xxx| 色综合男人天堂| 国产不卡一区二区在线播放| 亚洲一区国产精品| www.欧美三级电影.com| 精品一区精品二区| 日本一区二区不卡| 爱福利视频一区| 久久天堂av综合合色| 亚洲欧美一区二区精品久久久| 国产精品久久二区| 2018日韩中文字幕| 亚洲国产精品久久久久久| 91av在线视频观看| 欧美日韩国产一区中文午夜| 国产欧美日韩精品丝袜高跟鞋| 国产精品成人av在线| 最新国产精品拍自在线播放| 亚洲人av在线影院| 国产欧美 在线欧美| 亚洲综合中文字幕68页| 日韩高清电影好看的电视剧电影| 亚洲人成在线观看网站高清| 亚洲高清一二三区| 精品福利免费观看| 亚洲国产女人aaa毛片在线| yw.139尤物在线精品视频| 亚洲大胆人体在线| 久久亚洲春色中文字幕| 亚洲影视九九影院在线观看| 秋霞成人午夜鲁丝一区二区三区| 深夜福利日韩在线看| 日产日韩在线亚洲欧美| 欧美大片大片在线播放| 亚洲最大福利网| 国产99久久久欧美黑人| 久久精品国产电影| 国产一区二区三区毛片| 国产又爽又黄的激情精品视频| 激情亚洲一区二区三区四区| 成人精品一区二区三区| 尤物yw午夜国产精品视频明星| 久久免费观看视频| 久久不射电影网| 欧美精品999| 亚洲天堂男人天堂| 国产精品久久一区| 欧美性黄网官网| 亚洲激情在线观看| 亚洲精品少妇网址| 91久久精品国产91性色| 日韩欧美高清在线视频| 亚洲国产精品资源| 91国在线精品国内播放| 国产成人精品免费视频| 欧美日韩成人网| 在线精品视频视频中文字幕| 亚洲色图17p| 欧美最猛黑人xxxx黑人猛叫黄| 色偷偷噜噜噜亚洲男人的天堂| 国产午夜精品视频免费不卡69堂| 日本一区二三区好的精华液| 夜夜嗨av一区二区三区四区| 亚洲一区中文字幕在线观看| 亚洲片在线观看| 国产日韩欧美电影在线观看| 国内精品久久久久伊人av| 国产视频精品xxxx| 91久久久久久久久久| 亚洲最大的网站| 久久香蕉国产线看观看av| 欧美大片在线看免费观看| 亚洲精品videossex少妇| 国内精品视频久久| 97在线免费视频| 久久精品亚洲94久久精品| 超碰精品一区二区三区乱码| 91精品国产综合久久久久久蜜臀| 日本成人在线视频网址| 国产午夜精品美女视频明星a级| 欧美一区二区三区精品电影| 久久精品影视伊人网| 97精品国产97久久久久久春色| 在线日韩日本国产亚洲| 国产美女精彩久久| 亚洲第一男人天堂| 欧洲午夜精品久久久| 久久视频在线免费观看| 久久久久久亚洲精品中文字幕| 欧美日韩综合视频| 日韩在线不卡视频| 久热精品视频在线观看一区| 国产精品精品久久久| 性欧美亚洲xxxx乳在线观看|