c#---枚举与结构体

一、枚举

枚举是一组命名整型常量。

枚举类型是使用 enum 关键字声明的。

C# 枚举是值类型。

这里假如我们要做个切水果的游戏:

csharp 复制代码
//1.定义水果类型
public enum FruitType
{
    Apple,
    Lemon,
    Watermelon,
    Banana,
    Cherry,

    COUNT//水果总数
}
csharp 复制代码
// 2.随机刷新水果
public static FruitType getRandomFruit()
{
    Random ran = new Random(Guid.NewGuid().GetHashCode());
    int n = ran.Next((int)FruitType.COUNT);
    return (FruitType)n;
}
csharp 复制代码
//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);
csharp 复制代码
//4.遍历枚举成员
for (FruitType i=FruitType.Apple;i<FruitType.COUNT;i++)
{
    Console.WriteLine(i);
}

二、结构体

结构体是值类型数据结构,这样使得一个单一变量可以存储各种数据类型的相关数据。

struct 关键字用于创建结构体。

结构体是用来代表一个记录。

csharp 复制代码
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 结构:

  1. 结构是值类型(Value Type) : 结构是值类型,它们在栈上分配内存,而不是在堆上。当将结构实例传递给方法或赋值给另一个变量时,将复制整个结构的内容。
    类是引用类型(Reference Type): 类是引用类型,它们在堆上分配内存。当将类实例传递给方法或赋值给另一个变量时,实际上是传递引用(内存地址)而不是整个对象的副本。

  2. 继承和多态性

    结构不能继承: 结构不能继承其他结构或类,也不能作为其他结构或类的基类。

    类支持继承: 类支持继承和多态性,可以通过派生新类来扩展现有类的功能。

  3. 默认构造函数

    结构不能有无参数的构造函数: 结构不能包含无参数的构造函数。每个结构都必须有至少一个有参数的构造函数。

    类可以有无参数的构造函数: 类可以包含无参数的构造函数,如果没有提供构造函数,系统会提供默认的无参数构造函数。

相关推荐
ambition202424 分钟前
操作系统同步:读者-写者问题与读写公平法详解(附每个 PV 操作含义)
linux·开发语言·数据结构·unix
chuan.bai3 小时前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
离陌在学C#5 小时前
C# 事件(Event)详解:从概念到实战
开发语言·c#
Terra.K6 小时前
Java异常学习[特殊字符]
java·开发语言·学习
rockey6277 小时前
C#脚本引擎之AScript与Flee对比
c#·.net·script·eval·动态脚本
葡萄城技术团队7 小时前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
counting money7 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
wuyk5558 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无8 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152008 小时前
C++新特性---属性说明符与标准属性
开发语言·c++