枚举,结构体和数组

除了简单的变量类型之外,C#还提供了3个复杂的变量:枚举,结构体和数组。

枚举

枚举类型的定义

enum <typeName>{
    <value1>,
    <value2>,
    <value3>,
    ...
    <valueN>
}

枚举类型的声明

<typeName> <varName>;

枚举类型的赋值

<varName>=<typeName>.<value>;

为什么使用枚举类型

在游戏中我们可以定义一个int类型来存储状态 0 游戏暂停 1游戏失败 2游戏胜利 3开始菜单,但是这样不容易阅读,而且容易出错。 这个时候我们通过枚举类型来解决

enum GameState{
    Pause,
    Failed,
    Success,
    Start
}

在游戏中定义一个

GameState state = GameState.Start;

枚举类型中的每一个值,其实都是一个整数,默认为int类型

默认情况下枚举类型中的值从0开始,我们可以直接在枚举类型定义的时候 使用=运算符给每一个枚举指定一个特定的值

结构体

如果我们要表示一个向量的话 需要定义,三个float类型 x y z

这样比较麻烦,不方便管理,我们可以使用结构

定义结构

struct <typeName>{
    <memberDeclarations>
}
//其中<memberDeclarations>是结构体的成员,每个成员的声明如下<type> <name>;
struct Vector3{
    float x;
    float y;
    float z;
}

表示一个游戏物体(主角或者敌人)的坐标,需要三个小数

定义一个表示路径的结构,路径有一个方向和距离组成,假定方向只能是东西南北

结构体的定义,赋值和使用

struct Student {
    public string name;
    public int age;
    public int gread;

    //结构体的构造函数
    public Student(string name, int age, int gread) {
        this.name = name;
        this.age = age;
        this.gread = gread;
    }
}

public static void Main (string[] args)
{
    //定义一个结构体类型变量,并用构造函数初始化
    Student myStudent = new Student("zhangfan",35,2);
    Console.WriteLine ("name: {0}, age: {1}, gread: {2}",myStudent.name,myStudent.age,myStudent.gread);
    //重新赋值结构体内个别参数
    myStudent.name = "xiaomao";
    Console.WriteLine (myStudent.name);
}

数组

前面所有的类型都有一个共同点:他们都存储一个值(结构存储一组值),这样会带来不方便,假如我们要存储几个类型相同的值。

案例:我们要存储玩游戏10次的得分:

int score1 = 34;
int score2 = 34;
int score3 = 56;
...
int score10=3434;

另外一种方式是使用数组,数组的声明

<baseType>[] <name>;

数组是一个变量的索引列表,这个索引是一个整数,第一个条目的索引是0,第二个是1,以此类推...

int[] scores; //声明了分数的数组(int类型的数组)

数组的初始化

int[] scores;

//第一种方式
scores ={34,34,3,43,43,4,34};
//第二种方式
scores = new int[10]; 里面的每一个元素按照类型的默认值赋值
//第三种方式
scores = new int[10]{123,12,34,56,77,89,85,6,45634,34};

数组的访问

<arrayName>[条目索引]

数组的遍历

遍历数组中的每一个元素并输出

第一种方式for

for(int i =0;i<array.Length;i++){

}

第二种方式while循环

int i=0;
while(i<array.Length){
    //use array[i]
    i++;
}

第三种方式foreach

foreach(int temp in array){

}

results matching ""

    No results matching ""