您好,登錄后才能下訂單哦!
這篇文章主要講解了“C#結構和類的不同點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#結構和類的不同點有哪些”吧!
1、C#結構是堆棧對象,不能在堆上創建它;
2、C#結構可以繼承接口,但是不能繼承自其它結構;
3、不能重寫結構的默認構造函數,需要自定義構造函數時必須創建附帶參數的構造函數,以保證和默認構造函數的參數列表有所區別;
4、當使用new來創建結構對象時其構造函數自動被調用,若僅是像聲明一個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(); }
接下來看看怎么使用剛才創建的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來創建結構,所以構造函數不會被調用,僅是聲明一個結構類型的變量s2,但是緊接著我們為結構的所有成員變量進行初始化賦值,那么結構照樣可以使用。盡管很多人都在爭論,認為這種賦值伎倆太不專業且顯得有點傻,然而誰也無法找到合情合理的解釋,但是這樣做的確可行。當我們注釋掉賦值語句后,編譯器則會報錯:使用了未賦值的本地變量s2。
我們還可以使用自定義構造函數并傳遞一個整型變量來創建結構對象,代碼如下:
Student s3 = new Student(90); Console.WriteLine(s3.GetTot()); Console.WriteLine(s3.GetGrade());
C#結構示例之輸出:
270 Brilliant
不像類是引用類型,結構是值類型的,所以結構比類操作起來更簡單。當使用類僅存儲一些數據時,你會發現使用結構會好得多!結構化數組是在堆上創建的,而以一個一個類的形式來創建對象,則必須提前在堆上分配內存,而且每個類的引用地址也需要額外保存起來,所以使用結構化數組則更加的有效率。實際上在.Net框架里大部分類也都是結構,譬如:System.Drawing.Point。
感謝各位的閱讀,以上就是“C#結構和類的不同點有哪些”的內容了,經過本文的學習后,相信大家對C#結構和類的不同點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。