Unity C# 爆破计划(六):枚举和结构体

15 篇文章 1 订阅
本文介绍了C#编程中的枚举和结构体。枚举用于定义有限集合,如一周的天数,可以直接转换为整型。结构体是值类型,常用于简单数据的打包,适用于数据量小、访问速度快的场景。结构体与类的主要区别在于内存管理、继承和构造方式。选择结构体还是类取决于数据复杂度和性能需求。
摘要由CSDN通过智能技术生成


六、枚举和结构体

Covers:枚举和结构体

枚举

枚举是一种有限集合。生活中的有限集合很多,比如“一周中每天的名称”只有 7 种、“生日对应的星座”只有 12 种(现在好像是 13 种了?),这些事物都适合用枚举来描述。

写一个枚举的例子:

using System;

namespace Enums
{
    enum Weekday
    {
        Sun,
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
    }

    class Program
    {
        static void Main()
        {
            Weekday today = Weekday.Sat;
            Console.WriteLine(today + " = " + (int) today);
        }
    }
}

我们用关键字 enum 定义枚举类型 Weekday,它有 7 种取值,对应一周中每天的名称;我们在 Main 中创建了一个枚举变量 today 并初始化(注意 枚举项前也需要加上枚举类型名),并进行了两种打印尝试:

  1. 直接打印这个枚举量
  2. 将枚举量强转成 int 型后再打印

控制台输出:

Sat = 6

可见,在实现上,枚举是具名的整型量,它可以直接强转为枚举项对应的整数(默认情况下,各枚举量按顺序从 0 开始递增,也可以手动指定),当其被直接打印时,则打印枚举项的名称

结构体

所有对 C/C++ 编程有些许经验的人都知道结构体是什么,不知道也不要紧,结构体就是将数据和函数打个包,听起来好像跟类的概念基本一样?没错,在 C++ 中 结构体和类几乎没有区别,值得注意的区别只有默认访问权限的不同。结构体是实至名归的面向对象的始祖,从 C 开始就有人利用结构体实现一些基本的面向对象概念了,只是 C 的结构体不能直接包含函数(但可以包含函数指针)。

我们看一个简单的 C# 结构体,注意其定义语法:

struct Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine("{0}({1})", Name, Age);
    }
}

class Program
{
    static void Main()
    {
        Person me = new Person
        {
            Name = "Oasin",
            Age = 21
        };
        ++me.Age;

        me.PrintInfo();
    }
}

我们用 struct 关键字定义结构体 Person,它“打包”了两个变量 Name 和 Age,都是内置类型,称为 字段,设定为 public 权限;又“打包”了一个方法 PrintInfo,也是 public 权限(注意该方法不需要用 static 修饰);我们在 Main 中创建了一个结构体对象 me 并初始化;最后用点号访问了 me 的 Age 字段和 PrintInfo 方法。

C# 中,结构体和类有显著的区别:

  • 结构体是值类型,类是引用类型,结构体从 System.ValueType 继承而来,类从 System.Object 继承而来;
  • 结构体不能从任何类或结构体中派生而来,也不能被继承,但可以实现接口(听不懂就忽略);
  • 结构体不能具有默认构造器,听起来头大的话换个说法,结构体的属性不能有默认值
  • 结构体的实例即使用 new 创建,也会 创建在栈上,具有很高的访问速度;
  • 结构体不能具有析构函数(听不懂就忽略)。

**如何在类和结构体之间取舍:**结构体的内存效率比类高很多,因此当你希望创造一种行为简单、内容少、快速的“类”(例如在一个循环中要反复创建、处理和丢弃大量简单对象)时,使用结构体最好;当你需要更高级的面向对象特性(虽然我们还没学)时,或者类中的数据很多、要频繁在方法之间传递时,用类最好。

你可以将结构体理解为“最接近内置类型”的自定义类型,它非常简单而“纯粹”,在其中编写的方法也要尽可能简单明了。写程序的原则是化繁为简,当能够用简单的结构解决问题时,就不要用复杂的类。


T.B.C.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值