1、結(jié)構(gòu)體創(chuàng)建
結(jié)構(gòu)體的創(chuàng)建需要使用 struct
關(guān)鍵字來聲明,結(jié)構(gòu)體中可以有不同類型的變量:
struct role{
public string name;
public int age;
}
雖然結(jié)構(gòu)體和數(shù)組一樣是可以存儲(chǔ)多個(gè)值,但是它們的數(shù)據(jù)類型是不同的,數(shù)組是屬于引用類型,而結(jié)構(gòu)體是屬于值類型:
role role1;
... // 筆者懶,就省略了所有賦值的步驟
if(role1 is System.ValueType){
Console.WriteLine("結(jié)構(gòu)體是值類型");
}
else{
Console.WriteLine("結(jié)構(gòu)體是引用類型");
}
注意:在這里想要使用 role1
,首先保證 role1
里面的所有變量都已經(jīng)賦值。只要有一個(gè)沒有賦值,它就會(huì)產(chǎn)生報(bào)錯(cuò)。
2、結(jié)構(gòu)體中的其他類型
(1)數(shù)組
結(jié)構(gòu)體里面除了可以聲明變量,同時(shí)也可以聲明數(shù)組:
struct role{
public string[] food;
}
static void Main(string[] args){
role role1;
role1.food = new string[]{ "小籠包 ", "菜包", "肉包" };
}
(2)對象
可以聲明對象:
struct role{
public object obj;
}
static void Main(string[] args){
role role1;
role1.obj = 123;
}
(3)類
還可以聲明類:
class c1{
struct role{
public c2 c2;
}
static void Main(string[] args){
role role1;
role1.c2 = new c2();
}
}
class c2{
public string name = "xxx";
public void method(){
Console.WriteLine("成員方法");
}
}
(4)結(jié)構(gòu)
結(jié)構(gòu)體除了可以聲明許多數(shù)據(jù)類型,結(jié)構(gòu)作為數(shù)據(jù)類型的一種,也是可以被聲明:
struct role{
public string rname;
public struct skill{
public string sname;
}
}
static void Main(string[] args){
role role1;
role1.rname = "喬峰";
role.skill s1;
s1.sname = "降龍十八掌";
Console.WriteLine("{0}正在使用{1}", role1.rname, s1.sname);
// 喬峰正在使用降龍十八掌
}
(5)方法
除了可以聲明各種數(shù)據(jù)類型,結(jié)構(gòu)體里面還可以聲明方法:
struct role{
public void sayHello(){
Console.WriteLine("Hello everyone");
}
}
static void Main(string[] args){
role role1;
role1.sayHello();
}
3、總結(jié)
關(guān)于以上內(nèi)容學(xué)習(xí)的總結(jié):
(1)結(jié)構(gòu)體的創(chuàng)建,必須使用 struct
關(guān)鍵字來聲明。
(2)在使用結(jié)構(gòu)體的時(shí)候,結(jié)構(gòu)體中聲明的內(nèi)容必須要賦值。
(3)結(jié)構(gòu)體里面可以聲明變量、數(shù)組、對象、類、結(jié)構(gòu)體和方法。
關(guān)于學(xué)習(xí)的疑惑:
(1)結(jié)構(gòu)體中并不是所有的值都需要,有時(shí)候某部分的值僅需要默認(rèn)值,該怎么處理?
(2)結(jié)構(gòu)體里面聲明對象和類的具體使用是哪一些方面的?
(3)為什么在使用結(jié)構(gòu)體里面的數(shù)組,不能省略new
關(guān)鍵字,否則會(huì)產(chǎn)一些奇怪報(bào)錯(cuò)。