自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于C#結(jié)構(gòu)的一些認(rèn)識(shí)

開(kāi)發(fā) 后端
關(guān)于C#結(jié)構(gòu)的一些認(rèn)識(shí)向你介紹了關(guān)于C#結(jié)構(gòu)的特點(diǎn)和示例等等方面的內(nèi)容。

C#結(jié)構(gòu)了解之前的話:在C++語(yǔ)言里面結(jié)構(gòu)struct和類在許多方面都是相近的,只不過(guò)在存取方式上存在差別。但是,在C#下結(jié)構(gòu)和類有著明顯的不同點(diǎn):

1、C#結(jié)構(gòu)是堆棧對(duì)象,不能在堆上創(chuàng)建它;

2、C#結(jié)構(gòu)可以繼承接口,但是不能繼承自其它結(jié)構(gòu);

3、不能重寫(xiě)結(jié)構(gòu)的默認(rèn)構(gòu)造函數(shù),需要自定義構(gòu)造函數(shù)時(shí)必須創(chuàng)建附帶參數(shù)的構(gòu)造函數(shù),以保證和默認(rèn)構(gòu)造函數(shù)的參數(shù)列表有所區(qū)別;

4、當(dāng)使用new來(lái)創(chuàng)建結(jié)構(gòu)對(duì)象時(shí)其構(gòu)造函數(shù)自動(dòng)被調(diào)用,若僅是像聲明一個(gè)int類型的變量那樣聲明一個(gè)結(jié)構(gòu)類型的變量而不new的話,那么結(jié)構(gòu)中成員變量必須被初始化后才能使用該結(jié)構(gòu)對(duì)象。

C#結(jié)構(gòu)實(shí)例:

  1. struct Student : IGrade  
  2.  
  3. public int maths;  
  4. public int english;  
  5. public int csharp;  
  6.  
  7. public int GetTot()  
  8.     {  
  9. return maths+english+csharp;  
  10.     }  
  11.  
  12.     public Student(int y)  
  13. {  
  14. maths = english = csharp = y;  
  15.  }  
  16. }  
  17.     public string GetGrade()  
  18.  {  
  19. if(GetTot() > 240 )  
  20.  return "Brilliant";  
  21. if(GetTot() > 140 )  
  22. return "Passed";  
  23. return "Failed";  
  24.  }  
  25. }  
  26. interface IGrade  
  27. {  
  28.     string GetGrade();  

接下來(lái)看看怎么使用剛才創(chuàng)建的C#結(jié)構(gòu),代碼如下:

  1. Student s1 = new Student();  
  2. Console.WriteLine(s1.GetTot());  
  3. Console.WriteLine(s1.GetGrade()); 

C#結(jié)構(gòu)示例之輸出:

  1. 0  
  2. Failed 

上述代碼顯示默認(rèn)的構(gòu)造函數(shù)被調(diào)用,構(gòu)造函數(shù)將所有結(jié)構(gòu)中的int成員變量都自動(dòng)初始化為0,這就是為何合計(jì)為0的原因。

下面來(lái)看一段有意思的代碼:

  1. Student s2;  
  2. s2.maths = s2.english = s2.csharp = 50;  
  3. Console.WriteLine(s2.GetTot());  
  4. Console.WriteLine(s2.GetGrade()); 

C#結(jié)構(gòu)示例之輸出:

  1. 150  
  2. Passed 

上述代碼我們沒(méi)有使用new來(lái)創(chuàng)建結(jié)構(gòu),所以構(gòu)造函數(shù)不會(huì)被調(diào)用,僅是聲明一個(gè)結(jié)構(gòu)類型的變量s2,但是緊接著我們?yōu)榻Y(jié)構(gòu)的所有成員變量進(jìn)行初始化賦值,那么結(jié)構(gòu)照樣可以使用。盡管很多人都在爭(zhēng)論,認(rèn)為這種賦值伎倆太不專業(yè)且顯得有點(diǎn)傻,然而誰(shuí)也無(wú)法找到合情合理的解釋,但是這樣做的確可行。當(dāng)我們注釋掉賦值語(yǔ)句后,編譯器則會(huì)報(bào)錯(cuò):使用了未賦值的本地變量s2。

我們還可以使用自定義構(gòu)造函數(shù)并傳遞一個(gè)整型變量來(lái)創(chuàng)建結(jié)構(gòu)對(duì)象,代碼如下:

  1. Student s3 = new Student(90);  
  2. Console.WriteLine(s3.GetTot());  
  3. Console.WriteLine(s3.GetGrade()); 

C#結(jié)構(gòu)示例之輸出:

  1. 270  
  2. Brilliant 

不像類是引用類型,結(jié)構(gòu)是值類型的,所以結(jié)構(gòu)比類操作起來(lái)更簡(jiǎn)單。當(dāng)使用類僅存儲(chǔ)一些數(shù)據(jù)時(shí),你會(huì)發(fā)現(xiàn)使用結(jié)構(gòu)會(huì)好得多!結(jié)構(gòu)化數(shù)組是在堆上創(chuàng)建的,而以一個(gè)一個(gè)類的形式來(lái)創(chuàng)建對(duì)象,則必須提前在堆上分配內(nèi)存,而且每個(gè)類的引用地址也需要額外保存起來(lái),所以使用結(jié)構(gòu)化數(shù)組則更加的有效率。實(shí)際上在.Net框架里大部分類也都是結(jié)構(gòu),譬如:System.Drawing.Point。

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

【編輯推薦】

  1. C#的結(jié)構(gòu)體使用實(shí)例淺析
  2. C#結(jié)構(gòu)體變量學(xué)習(xí)淺談
  3. 解析C#結(jié)構(gòu)體指針
  4. C#指針使用簡(jiǎn)析
  5. C#結(jié)構(gòu)學(xué)習(xí)的詳細(xì)介紹
責(zé)任編輯:仲衡 來(lái)源: 互聯(lián)網(wǎng)轉(zhuǎn)載
相關(guān)推薦

2019-10-30 14:58:45

MVCAndroid表現(xiàn)層

2022-01-12 08:30:55

結(jié)構(gòu)體指針STM32

2009-07-30 18:49:31

C#時(shí)間類型

2019-11-18 14:27:01

虛擬化Intel VAMD SVM

2009-08-12 11:20:51

C#運(yùn)算符重載

2009-08-06 16:01:30

C#接口成員

2011-07-13 09:13:56

Android設(shè)計(jì)

2009-08-19 16:59:25

C# 操作符

2009-08-13 09:49:16

C#關(guān)鍵字

2013-04-07 10:40:55

前端框架前端

2009-06-18 09:51:25

Java繼承

2012-09-25 10:03:56

JavaJava封面Java開(kāi)發(fā)

2009-08-12 17:08:06

C#遠(yuǎn)程計(jì)算機(jī)

2009-12-11 14:17:36

ASP.NET Coo

2009-09-23 17:29:54

三層框架

2023-10-27 08:00:44

Spring瀏覽器機(jī)制

2009-06-04 16:28:43

EJB常見(jiàn)問(wèn)題

2011-03-11 09:27:11

Java性能監(jiān)控

2012-04-19 10:06:55

微軟Windows 8 E

2015-12-04 10:04:53

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)