有時(shí)我們可能對(duì)同一事物使用多個(gè)不同的變量來描述,如果將其分開來,顯得不夠靈活。結(jié)構(gòu)類型很好的解決了這個(gè)問題,它把多個(gè)不同的變量組織在一起。其定義方法如下:
struct 結(jié)構(gòu)名稱
{
成員聲明列表;
}
成員可以包含構(gòu)造函數(shù),常數(shù),字段,方法,屬性,索引器,運(yùn)算符和嵌套類型等。每個(gè)成員在聲明的時(shí)候都采用如下的格式:
訪問修飾符 類型 名稱;
假設(shè)我們想描述一個(gè)點(diǎn)的位置和顏色,可以將其定義為結(jié)構(gòu)類型的,方法如下:
struct point
{
double x; //表示點(diǎn)的橫坐標(biāo)
double y; //代表點(diǎn)的縱坐標(biāo)
string color;
}
定義之后,我們就可以像使用其它數(shù)據(jù)類型那樣來定義變量,如
point p1,p2;
即定義了兩個(gè)point類型的變量p1和p2。在使用里面的成員時(shí),可以通過.操作符來實(shí)現(xiàn)。如:
p1.x=23.4;p1.y=32;p2.color="綠色";
可能,大家感覺這種類型跟類類型相似,的確如此,但其也有著很大區(qū)別:
(1)結(jié)構(gòu)是值類型,類是引用類型;
(2)結(jié)構(gòu)中的成員如果沒有指定訪問修飾符,默認(rèn)是public,而類是private;
(3)結(jié)構(gòu)不能包含顯式的無參數(shù)構(gòu)造函數(shù),結(jié)構(gòu)成員自動(dòng)初始化為它們的默認(rèn)值,而類可以包含這樣的無參構(gòu)造函數(shù);
(4)對(duì)于結(jié)構(gòu)中的實(shí)例字段成員,不能在聲明時(shí)賦值初始化;
(5)結(jié)構(gòu)不支持繼承,但是,結(jié)構(gòu)可以從基類object繼承。結(jié)構(gòu)也可以實(shí)現(xiàn)接口。類支持繼承,也可以實(shí)現(xiàn)接口。
結(jié)構(gòu)是值類型,在為結(jié)構(gòu)分配內(nèi)存時(shí),速度非???。結(jié)構(gòu)在析構(gòu)時(shí),速度也很快。另外,結(jié)構(gòu)賦給另一個(gè)結(jié)構(gòu)時(shí)(例如A=B,其中A和B是結(jié)構(gòu)),結(jié)構(gòu)的所有內(nèi)容就被復(fù)制,而對(duì)于類,則只復(fù)制引用。結(jié)構(gòu)的這一行為,就會(huì)有性能損失,根據(jù)結(jié)構(gòu)的大小,性能損失也不同。
結(jié)構(gòu)主要用于小的數(shù)據(jù)結(jié)構(gòu)。但當(dāng)把結(jié)構(gòu)作為參數(shù)傳遞給方法時(shí),最好作為ref參數(shù)傳遞,以避免性能損失。
下面給出關(guān)于結(jié)構(gòu)體一個(gè)完整的例子:
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("學(xué)號(hào)為{0}的學(xué)生性別為{1};年齡為{2}",s.sno,s.sex,s.age);
}
}
}
運(yùn)行效果如下圖所示:

新聞熱點(diǎn)
疑難解答