結構是程式員定義的資料類型,非常的類似于類。有資料成員和函數成員。
但是也有差別:
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;
}
先建立一個CSimple類,和一個Simple結構
在Main()分别對它們執行個體化聲明兩個個變量後,cs1和cs2分别指向在堆中的引用,而ss1和ss2分别在棧中配置設定空間并存儲。
把一個結構指派給另外一個結構,就是從一個結構中把值複值給另外一個結構。與類不同的是,複制類變量時隻有引用被複制。
如上面的代碼,類指派結束後,cs2和cs1指向堆中的同一個對象。但是在結構指派結束後,ss2成員的值和ss1成員的值相同。
結構中的構造函數和析構函數
語言隐式的為每個結構提供一個無參數的構造函數。這個構造函數把結構的每個成員設定為該類型的預設值,引用成員被設定成null
預定義的無參數構造函數對每個結構都存在,而且不能删除或者重新定義。但是可以建立另外的構造函數,隻要他們有參數。這和類不同,對于類,編譯器隻在沒有其它構造函數聲明時提供隐式的無參數構造函數。
要調用一個構造函數,包括隐式的無參數構造函數,要使用new運算符。即使不從堆中配置設定記憶體也使用new運算符。
如下面的執行個體:
static void Main(string[] args)
{
Simple s1 = new Simple(); //調用隐式的構造函數
Simple s2 = new Simple(5, 10); //調用構造函數
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運算符建立結構的執行個體。但是,有一些限制:
1)不能使用資料成員的值,直到顯示的設定它
2)不能調用任何函數成員,直到所有資料成員已經被指派
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;
}
原創作品,允許轉載,轉載時請務必以超連結形式标明文章 原始出處 、作者資訊和本聲明。
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
轉載于:https://www.cnblogs.com/yisuowushinian/archive/2013/01/10/4715638.html