新聞中心
C#結構了解之前的話:在C++語言里面結構struct和類在許多方面都是相近的,只不過在存取方式上存在差別。但是,在C#下結構和類有著明顯的不同點:

網站建設哪家好,找創(chuàng)新互聯公司!專注于網頁設計、網站建設、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯還提供了巴彥淖爾免費建站歡迎大家使用!
1、C#結構是堆棧對象,不能在堆上創(chuàng)建它;
2、C#結構可以繼承接口,但是不能繼承自其它結構;
3、不能重寫結構的默認構造函數,需要自定義構造函數時必須創(chuàng)建附帶參數的構造函數,以保證和默認構造函數的參數列表有所區(qū)別;
4、當使用new來創(chuàng)建結構對象時其構造函數自動被調用,若僅是像聲明一個int類型的變量那樣聲明一個結構類型的變量而不new的話,那么結構中成員變量必須被初始化后才能使用該結構對象。
C#結構實例:
- struct Student : IGrade
- public int maths;
- public int english;
- public int csharp;
- public int GetTot()
- {
- return maths+english+csharp;
- }
- public Student(int y)
- {
- maths = english = csharp = y;
- }
- }
- public string GetGrade()
- {
- if(GetTot() > 240 )
- return "Brilliant";
- if(GetTot() > 140 )
- return "Passed";
- return "Failed";
- }
- }
- interface IGrade
- {
- string GetGrade();
- }
接下來看看怎么使用剛才創(chuàng)建的C#結構,代碼如下:
- Student s1 = new Student();
- Console.WriteLine(s1.GetTot());
- Console.WriteLine(s1.GetGrade());
C#結構示例之輸出:
- 0
- Failed
上述代碼顯示默認的構造函數被調用,構造函數將所有結構中的int成員變量都自動初始化為0,這就是為何合計為0的原因。
下面來看一段有意思的代碼:
- Student s2;
- s2.maths = s2.english = s2.csharp = 50;
- Console.WriteLine(s2.GetTot());
- Console.WriteLine(s2.GetGrade());
C#結構示例之輸出:
- 150
- Passed
上述代碼我們沒有使用new來創(chuàng)建結構,所以構造函數不會被調用,僅是聲明一個結構類型的變量s2,但是緊接著我們?yōu)榻Y構的所有成員變量進行初始化賦值,那么結構照樣可以使用。盡管很多人都在爭論,認為這種賦值伎倆太不專業(yè)且顯得有點傻,然而誰也無法找到合情合理的解釋,但是這樣做的確可行。當我們注釋掉賦值語句后,編譯器則會報錯:使用了未賦值的本地變量s2。
我們還可以使用自定義構造函數并傳遞一個整型變量來創(chuàng)建結構對象,代碼如下:
- Student s3 = new Student(90);
- Console.WriteLine(s3.GetTot());
- Console.WriteLine(s3.GetGrade());
C#結構示例之輸出:
- 270
- Brilliant
不像類是引用類型,結構是值類型的,所以結構比類操作起來更簡單。當使用類僅存儲一些數據時,你會發(fā)現使用結構會好得多!結構化數組是在堆上創(chuàng)建的,而以一個一個類的形式來創(chuàng)建對象,則必須提前在堆上分配內存,而且每個類的引用地址也需要額外保存起來,所以使用結構化數組則更加的有效率。實際上在.Net框架里大部分類也都是結構,譬如:System.Drawing.Point。
關于C#結構的相關內容就向你介紹到這里,希望對你學習C#結構有所幫助。
【編輯推薦】
- C#的結構體使用實例淺析
- C#結構體變量學習淺談
- 解析C#結構體指針
- C#指針使用簡析
- C#結構學習的詳細介紹
本文名稱:關于C#結構的一些認識
分享URL:http://www.5511xx.com/article/ccdscoj.html


咨詢
建站咨詢
