日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#結(jié)構(gòu)學(xué)習(xí)的詳細(xì)介紹

C#結(jié)構(gòu)1.C#結(jié)構(gòu)的聲明

·結(jié)構(gòu)是用戶自定義的值類型

 
 
 
  1. struct Pair   
  2.  
  3. {   
  4.  
  5.  public int X, Y;   
  6. //公有變量名單詞的首字母大寫(PascalCase規(guī)則)  
  7.  
  8. }  
  9. struct Pair   
  10.  
  11. {   
  12.     private int x, y;   
  13. //非公有變量名第一個(gè)單詞的首字母小寫(camelCase規(guī)則)  
  14. }  
  15.  
  16. struct Pair   
  17.  
  18. {   
  19.  
  20.     int x, y; //缺省的訪問修飾符是private  
  21.  
  22. };//可以有結(jié)尾分號(hào) 

C#結(jié)構(gòu)是C#程序員用來定義自己的值類型的最普遍的機(jī)制。結(jié)構(gòu)比枚舉更強(qiáng)大,因?yàn)樗峁┖瘮?shù)、字段、構(gòu)造函數(shù)、操作符和訪問控制。結(jié)構(gòu)成員的缺省訪問權(quán)限是private(在C++中是public)。當(dāng)你定義結(jié)構(gòu)的成員名時(shí),不要忘了對(duì)公有成員使用PascalCase規(guī)則,而對(duì)非公有成員使用camelCase規(guī)則。

結(jié)構(gòu)類的聲明中雖然可以使用結(jié)尾分號(hào),但建議你不要使用,這只不過是為了照顧C(jī)++程序員的習(xí)慣。

C#結(jié)構(gòu)2.值的產(chǎn)生

·一個(gè)結(jié)構(gòu)類的變量存在于棧(stack)中

◆字段不是被預(yù)先賦值的

◆字段只有被賦值后才能讀

◆使用點(diǎn)操作符來訪問成員

下面的例子假設(shè)Pair是一結(jié)構(gòu),它有兩公有整數(shù)類成員X,Y

 
 
 
  1. static void Main()   
  2.  
  3. {   
  4.  
  5.     Pair p;   
  6.  
  7.     Console.Write(p.X); //錯(cuò)誤  
  8.  
  9.     ...   
  10.  
  11. }  
  12.  
  13.    
  14.  
  15. static void Main()   
  16.  
  17. {   
  18.  
  19.     Pair p;   
  20.  
  21.     p.X = 0;   
  22.  
  23.     Console.Write(p.X); //正確  
  24.  
  25.     ...   
  26.  

C#結(jié)構(gòu)類的變量存在于棧中。在上面的例子中,雖然聲明了一個(gè)叫p的Pair類結(jié)構(gòu)變量,但實(shí)際上只是聲明兩個(gè)局部變量p.X和p.Y的一種簡寫形式。

上面例子中的第一段程序的Console.Write試圖使用p.X的值,但它是錯(cuò)誤的,因?yàn)閜.X沒有被賦初值。

C#結(jié)構(gòu)3.值的初始化

·一個(gè)結(jié)構(gòu)變量:

◆總是能使用缺省構(gòu)造函數(shù)來進(jìn)行初始化

◆缺省構(gòu)造函數(shù)把字段初始化為0/false/null

 
 
 
  1. static void Main()   
  2.  
  3. {   
  4.     Pair p;   
  5.  
  6.     Console.Write(p.X); //錯(cuò)誤,p.X沒有初始化  
  7.  
  8.     ...   
  9.  
  10. }  
  11.  
  12. static void Main()   
  13.  
  14. {   
  15.  
  16.     Pair p = new Pair();   
  17.  
  18.     Console.Write(p.X); //正確,p.X=0  
  19.  
  20.     ...   
  21.  

除了上面介紹的初始化方法外,還可以使用缺省構(gòu)造函數(shù)來初始化一個(gè)結(jié)構(gòu)變量。調(diào)用構(gòu)造函數(shù)總是使用new關(guān)鍵字。一個(gè)結(jié)構(gòu)變量是值類型的,它直接存在于棧中,new關(guān)鍵字的使用不會(huì)在堆中開辟內(nèi)存。結(jié)構(gòu)的缺省構(gòu)造函數(shù)總是把結(jié)構(gòu)變量中的所有字段初始化(你不能改變這一行為,在下面一節(jié)會(huì)講到)。

C#結(jié)構(gòu)學(xué)習(xí)遇到的問題:如果你有C++或Java背景,你可能會(huì)很難相信使用new關(guān)鍵字來調(diào)用構(gòu)造函數(shù)不會(huì)在堆中分配內(nèi)存,但在C#中就是這樣。結(jié)構(gòu)變量存在于棧中,調(diào)用構(gòu)造函數(shù)初始化它的字段,沒有發(fā)生堆的內(nèi)存分配。

C++程序員注意:在C#中調(diào)用缺省構(gòu)造函數(shù)必須使用括號(hào)。

 
 
 
  1. Pair p = new Pair; //錯(cuò)誤  
  2.  
  3. Pair p = new Pair();//正確 

C#結(jié)構(gòu)4.值的構(gòu)造函數(shù)

·一般規(guī)則

◆編譯器聲明缺省構(gòu)造函數(shù)

◆你不能聲明缺省構(gòu)造函數(shù)

◆缺省構(gòu)造函數(shù)把所有的實(shí)例字段初始化為0/false/null

 
 
 
  1. struct Pair   
  2.  
  3. {   
  4.  
  5. }  
  6.  
  7. //編譯器聲明一缺省構(gòu)造函數(shù)  
  8.  
  9. struct Pair   
  10.  
  11. {   
  12.  
  13.     public Pair()   
  14.  
  15.     { ... }   
  16.  
  17. }  
  18.  
  19. //錯(cuò)誤,不能自己聲明缺省構(gòu)造函數(shù)  
  20.  
  21. struct Pair   
  22.  
  23. {   
  24.     public Pair(int x, int y)   
  25.  
  26.     { ... }   
  27.  
  28. }  
  29.  
  30. //正確,但編譯器聲明的缺省構(gòu)造函數(shù)仍存在  

C#結(jié)構(gòu)類總有一編譯器聲明的公有的缺省構(gòu)造函數(shù)。不管你有沒有聲明構(gòu)造函數(shù),編譯器聲明的公有的缺省構(gòu)造函數(shù)總是存在的。所以你不能定義缺省構(gòu)造函數(shù),這樣會(huì)出現(xiàn)兩個(gè)缺省構(gòu)造函數(shù),這是不允許的。但要注意的是,這只適合于結(jié)構(gòu),對(duì)于類是不適用的。編譯器產(chǎn)生的缺省構(gòu)造函數(shù)把所有的實(shí)例字段歸零化:

◆bool型化為false

◆整型(包括字符型)化為0

◆實(shí)型化為0.0

◆枚舉型化為0

◆引用型(包括字符串)化為null

用戶自定義的結(jié)構(gòu)類的構(gòu)造函數(shù)的默認(rèn)訪問權(quán)限是private,和結(jié)構(gòu)類的字段一樣。

C#不允許你聲明一個(gè)和構(gòu)造函數(shù)名字一樣的函數(shù)。

C#結(jié)構(gòu)5.:this(…)

·一個(gè)構(gòu)造函數(shù)可以調(diào)用另一構(gòu)造函數(shù)

 
 
 
  1. struct ColouredPoint   
  2.  
  3. {   
  4.  
  5.     public ColouredPoint(int x, int y)   
  6.  
  7. : this(x, y, Colour.Red)   
  8.  
  9.     {   
  10.     }   
  11.  
  12.     public ColouredPoint(int x, int y, Colour c)   
  13.     {   
  14. ...   
  15.  
  16.     }    
  17.     ...   
  18.     private int x, y;   
  19.     private Colour c;   

C#結(jié)構(gòu)的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你學(xué)習(xí)了解C#結(jié)構(gòu)有所幫助。

【編輯推薦】

  1. C#結(jié)構(gòu)體定義的詳解
  2. C#的結(jié)構(gòu)體使用實(shí)例淺析
  3. C#結(jié)構(gòu)體變量學(xué)習(xí)淺談
  4. 解析C#結(jié)構(gòu)體指針
  5. C#指針使用簡析

當(dāng)前題目:C#結(jié)構(gòu)學(xué)習(xí)的詳細(xì)介紹
地址分享:http://www.dlmjj.cn/article/codosep.html