App下載

C# 編程學(xué)習(xí)系列(九)結(jié)構(gòu)體

自我否定先驅(qū)者 2021-12-17 14:39:45 瀏覽數(shù) (2548)
反饋

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ù)組一樣是可以存儲多個值,但是它們的數(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)賦值。只要有一個沒有賦值,它就會產(chǎn)生報錯。

2、結(jié)構(gòu)體中的其他類型

(1)數(shù)組

結(jié)構(gòu)體里面除了可以聲明變量,同時也可以聲明數(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)體的時候,結(jié)構(gòu)體中聲明的內(nèi)容必須要賦值。

(3)結(jié)構(gòu)體里面可以聲明變量、數(shù)組、對象、類、結(jié)構(gòu)體和方法。

關(guān)于學(xué)習(xí)的疑惑:

(1)結(jié)構(gòu)體中并不是所有的值都需要,有時候某部分的值僅需要默認(rèn)值,該怎么處理?

(2)結(jié)構(gòu)體里面聲明對象和類的具體使用是哪一些方面的?

(3)為什么在使用結(jié)構(gòu)體里面的數(shù)組,不能省略new 關(guān)鍵字,否則會產(chǎn)一些奇怪報錯。

C#

0 人點(diǎn)贊