1.枚举
如何定义一个枚举 enum 定义枚举的关键字 枚举的作用:限制取值的范围
enum Root // 枚举类型的名字 首字母大写
{
MT,SJ,MD,MLT,HM,BZ
}
int long string char这些类型都是系统提供的类型,枚举类型就是我们自己定义的一个的枚举类型,名字需要我们自己定义,有哪些取值范围,也需要我们自己定义 定义一个枚举类型的变量 赋值只能给它枚举类型中存在的值,如果赋值不存在报错
Root root = Root.MT;
if (root == Root.MT)
{
Console.WriteLine("馒头");
}
// 修改
root = Root.SJ;
Game game = Game.Menu;
if (game == Game.Menu)
{
// 可以做一些菜单页面的操作
Console.WriteLine("在菜单页面");
}
game = Game.Runing;
if (game == Game.Menu)
{
// 如果在游戏中页面,就可以去做某些操作
Console.WriteLine("开始打游戏");
}
game = Game.Stop;
// 如何获取枚举类型值
// 枚举列表中的每个值都代表一个整数值,一个比前面大的整数值,默认情况下第一个枚举中的值就是0,可以修改默认值(枚举类型的值,在储存的时候都是以对应的整数存放的,因为使用字符串储存的话占用的空间大,数字占用空间小,数字在进行比较的时候运行起来速度快,字符串需要一个一个字符进行比较)
int num = (int)game;
Console.WriteLine(num);
// 菜单 游戏中 暂停 失败 成功
enum Game
{
// 如何修改枚举类型的整数值,在枚举数据的后面赋值一个想更改的数字
// 修改后的值,后面的值的整数会相对前面修改过的值进行计算,一般情况下不会修改默认值
Menu,Runing,Stop,Fail, Success
}
2.结构体
结构体(Struct)是一种用于存储多个相关数据项的值类型。它类似于类(Class),但是结构体是值类型,而类是引用类型。结构体通常用于存储轻量级的数据,如坐标、颜色、配置等。相比于类,结构体在内存中分配的空间更小,且被赋值给其他变量时会进行复制,而不是通过引用共享。
需要注意的是,结构体是值类型,当它作为参数传递给方法或赋值给另一个变量时,会进行值拷贝。这与类不同,类是引用类型,传递的是引用而非真实的对象副本。
结构体的作用,就是吧某一类的变量(数据)进行整合,组成一个新的数据类型,相当一个全新的信息 struct 关键字 定义一个结构体
struct Student // Student 就是结构体的名称
{
// 结构体内部,定义一些数据,定义学生相关的数据
// public 访问条件,公开的,所有的对象都可以访问
public int age;
public string name;
public string sex;
public int id;
}
// 使用结构体,首先要定义结构体
Student s; // 定义了一个结构体变量
// 通过这个变量,访问学生信息,也可以赋值修改
s.name = "小张";
s.age = 18;
s.id = 0604;
s.sex = "女";
// 如果想访问某个学生的信息,结构体的变量.属性值
Console.WriteLine(s.name+" "+s.sex);
struct Position
{
public int x;
public int y;
public int z;
// 结构体里面不仅可以定义数据,也可以定义方法,注意:static关键字,静态方法只能访问静态数据
public void Pos()
{
Console.WriteLine(x+y+z);
}
}
Position p;
p.x = 1;
p.y = 2;
p.z = 3;
p.Pos();
C# 结构的特点
-
结构可带有方法、字段、索引、属性、运算符方法和事件。
-
结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
-
与类不同,结构不能继承其他的结构或类。
-
结构不能作为其他结构或类的基础结构。
-
结构可实现一个或多个接口。
-
结构成员不能指定为 abstract、virtual 或 protected。
-
当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
-
如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
类 vs 结构
类和结构有以下几个基本的不同点:
-
类是引用类型,结构是值类型。
-
结构不支持继承。
-
结构不能声明默认的构造函数。
3.委托
委托(delegate)是一种储存函数引用的类型 委托定义指定一个返回值和参数列表 定义了委托之后,就可声明委托类型的变量,接着就可以把一个返回值和参数列表一样的方法赋值给这个委托类型的变量 delegate 定义委托的关键字 delegate void Mydelegate(); delegate 定义委托的关键字 定义了一个返回值为int类型 Mydelegate2 委托的名字()参数,没有方法体 delegate int Mydelegate2(int a,int b);
static void Text()
{
Console.WriteLine("text");
}
static int Add(int a,int b)
{
return a + b;
}
delegate void Mydelegate();
delegate int Mydelegate2(int a,int b);
static void Main(string[] args)
{
Console.WriteLine(Cheng(1.5, 3.5));
// 如何使用委托,声明一个委托类型的变量
// 委托的返回值与参数列表要和方法的返回值与参数列表一致,这样委托就可以指向这个方法了,那如果不一样就不能委托
Mydelegate Myda;
Myda = Text;
Myda();
Mydelegate2 Myda2;
// 方法在赋值给委托的时候不要加(),因为加上()就是调用方法了
Myda2 = Add;
int a = Myda2(10,20);
Console.WriteLine(a);
Console.WriteLine(Myda2(10, 20));
}