C# 结构体
C# 結構體
1,結構體不能出現在繼承關系中,除了繼承接口。
結構體不能繼承類或結構,也不能被類或結構繼承,只可以繼承接口。
2,struct不能定義默認構造函數(無參構造函數),也不能定義析構函數。class對這兩點都無限制。
3,如果struct提供了帶參構造函數,則它的所有字段(變量)都必須在構造函數中初始化,否則編譯報錯。class對此無限制。
4,成員默認修飾符都是private,在C++中則默認為public
5,結構體成員變量不能在聲明時初始化,即不能帶有初始值。class對此無限制
using System; delegate string DTE(int x, string s);class MYTestX {struct ST{//public int x = 3; //錯誤,不能在結構體中這樣初始化變量 public int x;public int y;//結構體有默認構造函數,我們不能定義它//ST()//錯誤,結構體不能有無參構造函數。//{//}//若定義了有參構造函數,則必須在此初始化全部成員變量 ST(int x, int y){this.x = x;this.y = y;}}class CTEST{}static void Main(string[] args){ST ot = new ST(); //調用默認構造函數,將所有成員置為默認值 int x = ot.x;Console.WriteLine(x);ST otx;//在棧上為結構體otx分配空間,大小為兩個int(若有其它類型注意字節對齊問題) otx.x = 20;//c#中,任何未初始化的值或類型都不能被使用,其值是未知的 int yt;string s0;CTEST otest;//在棧上為otest變量本身分配4或8字節內存(相當于C++的指針),32位機是4字節,64位機是8字節//此時并未給otest在堆上分配內存,只有等到new CTEST()時才分配堆內存 Console.WriteLine(otx.x);//編譯錯誤otx.x = 2; //可以,這是賦值操作Console.WriteLine(yt);//編譯錯誤Console.WriteLine(s0);//編譯錯誤Console.WriteLine(otest);//編譯錯誤 }}
?
?
posted on 2016-10-02 11:47 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
- 上一篇: c# nullable类型有什么用
- 下一篇: c# char unsigned_dll