結構是程序員定義的數(shù)據(jù)類型,非常的類似于類。有數(shù)據(jù)成員和函數(shù)成員。
成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構建的平臺為眾多戶提供德陽服務器托管 四川大帶寬租用 成都機柜租用 成都服務器租用。
但是也有區(qū)別:
1)類是引用類型,而結構是值類型;
2)結構是隱式密封的,不能被派生;
語法聲明與類相似:
- //結構的聲明
- struct StructName
- {
- //包含的成員變量
- }
看下邊的示例代碼來演示C#結構的使用方法:
- static void Main(string[] args)
- {
- Point first, second, third;
- first.x = 10; first.y = 10;
- second.x = 20; second.y = 20;
- third.x = first.x + second.x;
- third.y = first.y + second.y;
- Console.WriteLine("first:{0},{1}",first.x,first.y);
- Console.WriteLine("second:{0},{1}",second.x,second.y);
- Console.WriteLine("third:{0},{1}",third.x,third.y);
- Console.ReadKey();
- }
- struct Point
- {
- public int x;
- public int y;
- }
結構是值類型
1)結構類型的變量不能使null;
2)兩個結構變量不能引用同一對象
- static void Main(string[] args)
- {
- CSimple cs1 = new CSimple(),cs2=null;
- Simple ss1 = new Simple(),ss2=new Simple();
- cs1.x = ss1.x = 5;
- cs1.y = ss1.y = 10;
- cs2 = cs1; //賦值類實例
- ss2 = ss1; //賦值結構實例
- }
- class CSimple
- {
- public int x;
- public int y;
- }
- struct Simple
- {
- public int x;
- public int y;
- }
先創(chuàng)建一個CSimple類,和一個Simple結構
在Main()分別對它們實例化聲明兩個個變量后,cs1和cs2分別指向在堆中的引用,而ss1和ss2分別在棧中分配空間并存儲。
把一個結構賦值給另外一個結構,就是從一個結構中把值復值給另外一個結構。與類不同的是,復制類變量時只有引用被復制。
如上面的代碼,類賦值結束后,cs2和cs1指向堆中的同一個對象。但是在結構賦值結束后,ss2成員的值和ss1成員的值相同。
結構中的構造函數(shù)和析構函數(shù)
語言隱式的為每個結構提供一個無參數(shù)的構造函數(shù)。這個構造函數(shù)把結構的每個成員設置為該類型的默認值,引用成員被設置成null
預定義的無參數(shù)構造函數(shù)對每個結構都存在,而且不能刪除或者重新定義。但是可以創(chuàng)建另外的構造函數(shù),只要他們有參數(shù)。這和類不同,對于類,編譯器只在沒有其它構造函數(shù)聲明時提供隱式的無參數(shù)構造函數(shù)。
要調用一個構造函數(shù),包括隱式的無參數(shù)構造函數(shù),要使用new運算符。即使不從堆中分配內(nèi)存也使用new運算符。
如下面的實例:
- static void Main(string[] args)
- {
- Simple s1 = new Simple(); //調用隱式的構造函數(shù)
- Simple s2 = new Simple(5, 10); //調用構造函數(shù)
- Console.WriteLine("{0},{1}",s1.x,s1.y);
- Console.WriteLine("{0},{1}", s2.x, s2.y);
- Console.ReadKey();
- }
- struct Simple
- {
- public int x;
- public int y;
- public Simple(int a, int b)
- {
- x = a;
- y = b;
- }
- }
也可以不適用new運算符創(chuàng)建結構的實例。但是,有一些限制:
1)不能使用數(shù)據(jù)成員的值,直到顯示的設置它
2)不能調用任何函數(shù)成員,直到所有數(shù)據(jù)成員已經(jīng)被賦值
- static void Main(string[] args)
- {
- Simple s1, s2;
- Console.WriteLine("{0},{1}", s1.x, s1.y);//編譯錯誤,s1.x, s1.y還沒有被賦值
- s2.x = 50;
- s2.y = 10;
- Console.WriteLine("{0},{1}", s2.x, s2.y);
- Console.ReadKey();
- }
- struct Simple
- {
- public int x;
- public int y;
- }
原創(chuàng)作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。