一、枚举
枚举是一组命名整型常量。
枚举类型是使用 enum 关键字声明的。
C# 枚举是值类型。
这里假如我们要做个切水果的游戏:
//1.定义水果类型
public enum FruitType
{Apple,Lemon,Watermelon,Banana,Cherry,COUNT//水果总数
}
// 2.随机刷新水果
public static FruitType getRandomFruit()
{Random ran = new Random(Guid.NewGuid().GetHashCode());int n = ran.Next((int)FruitType.COUNT);return (FruitType)n;
}
//3.测试水果数据
int apple_num=0, lemon_num=0, watermelon_num=0, banana_num=0, cherry_num=0;
for (int i=0;i<10000;i++)
{FruitType m_type = Program.getRandomFruit();switch(m_type){case FruitType.Apple:apple_num++;break;case FruitType.Lemon:lemon_num++;break;case FruitType.Watermelon:watermelon_num++;break;case FruitType.Banana:banana_num++;break;case FruitType.Cherry:cherry_num++;break;default:Console.WriteLine("null");break;}
}
Console.WriteLine(apple_num);
Console.WriteLine(lemon_num);
Console.WriteLine(watermelon_num);
Console.WriteLine(banana_num);
Console.WriteLine(cherry_num);
//4.遍历枚举成员
for (FruitType i=FruitType.Apple;i<FruitType.COUNT;i++)
{Console.WriteLine(i);
}
二、结构体
结构体是值类型数据结构,这样使得一个单一变量可以存储各种数据类型的相关数据。
struct 关键字用于创建结构体。
结构体是用来代表一个记录。
struct Person
{private string name;private int age;private string sex;public Person(string _name,int _age,string _sex){name = _name;age = _age;sex = _sex;}public void SayHello(){Console.WriteLine("大家好,我叫{0},我的年龄{1},性别{2}",name,age,sex);}
}
类 vs 结构:
-
结构是值类型(Value Type): 结构是值类型,它们在栈上分配内存,而不是在堆上。当将结构实例传递给方法或赋值给另一个变量时,将复制整个结构的内容。
类是引用类型(Reference Type): 类是引用类型,它们在堆上分配内存。当将类实例传递给方法或赋值给另一个变量时,实际上是传递引用(内存地址)而不是整个对象的副本。 -
继承和多态性:
结构不能继承: 结构不能继承其他结构或类,也不能作为其他结构或类的基类。
类支持继承: 类支持继承和多态性,可以通过派生新类来扩展现有类的功能。 -
默认构造函数:
结构不能有无参数的构造函数: 结构不能包含无参数的构造函数。每个结构都必须有至少一个有参数的构造函数。
类可以有无参数的构造函数: 类可以包含无参数的构造函数,如果没有提供构造函数,系统会提供默认的无参数构造函数。