有時我們可能對同一事物使用多個不同的變量來描述,如果將其分開來,顯得不夠靈活。結構類型很好的解決了這個問題,它把多個不同的變量組織在一起。其定義方法如下:
struct 結構名稱
{
成員聲明列表;
}
成員可以包含構造函數,常數,字段,方法,屬性,索引器,運算符和嵌套類型等。每個成員在聲明的時候都采用如下的格式:
訪問修飾符 類型 名稱;
假設我們想描述一個點的位置和顏色,可以將其定義為結構類型的,方法如下:
struct point
{
double x; //表示點的橫坐標
double y; //代表點的縱坐標
string color;
}
定義之后,我們就可以像使用其它數據類型那樣來定義變量,如
point p1,p2;
即定義了兩個point類型的變量p1和p2。在使用里面的成員時,可以通過.操作符來實現。如:
p1.x=23.4;p1.y=32;p2.color="綠色";
可能,大家感覺這種類型跟類類型相似,的確如此,但其也有著很大區別:
(1)結構是值類型,類是引用類型;
(2)結構中的成員如果沒有指定訪問修飾符,默認是public,而類是private;
(3)結構不能包含顯式的無參數構造函數,結構成員自動初始化為它們的默認值,而類可以包含這樣的無參構造函數;
(4)對于結構中的實例字段成員,不能在聲明時賦值初始化;
(5)結構不支持繼承,但是,結構可以從基類object繼承。結構也可以實現接口。類支持繼承,也可以實現接口。
結構是值類型,在為結構分配內存時,速度非???。結構在析構時,速度也很快。另外,結構賦給另一個結構時(例如A=B,其中A和B是結構),結構的所有內容就被復制,而對于類,則只復制引用。結構的這一行為,就會有性能損失,根據結構的大小,性能損失也不同。
結構主要用于小的數據結構。但當把結構作為參數傳遞給方法時,最好作為ref參數傳遞,以避免性能損失。
下面給出關于結構體一個完整的例子:
using System;
namespace StructType
{
class Class1
{
struct student
{
public int sno;
public char sex;
public int age;
}
static void Main(string[] args)
{
student s;
s.sno=100;
s.sex='男';
s.age=23;
Console.WriteLine("學號為{0}的學生性別為{1};年齡為{2}",s.sno,s.sex,s.age);
}
}
}
運行效果如下圖所示:
新聞熱點
疑難解答