在C#编程中,枚举和结构体提供了一种简化代码表达和管理数据的方式。它们可以应用于各种场景,使代码更加易读和可维护。
枚举(Enum)
枚举是一种特殊的值类型,通常用于表示一组相关常量。
定义枚举
public enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
使用枚举
DaysOfWeek today = DaysOfWeek.Monday;
if (today == DaysOfWeek.Monday)
{
Console.WriteLine("Start of the work week.");
}
- 默认情况下,枚举的底层类型是int,从0开始递增。
- 可以指定枚举的基础类型以及具体数值。
public enum ErrorCodes : byte
{
None = 0,
NotFound = 1,
InvalidOperation = 2
}
结构体(Struct)
结构体是值类型,用于封装小型数据结构。它们类似于类,但有一些关键区别。
定义结构体
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y)
{
X = x;
Y = y;
}
}
使用结构体
Point p1 = new Point(10, 20);
Console.WriteLine($"X: {p1.X}, Y: {p1.Y}");
类与结构体的区别
存储位置:
- 类是引用类型,实例存在堆上。
- 结构体是值类型,实例通常存在栈上。
继承:
- 类支持继承,可以有基类。
- 结构体不支持继承(但可以实现接口)。
内存分配:
- 类分配在堆上,垃圾回收负责清理。
- 结构体分配在栈上,超出作用域后自动清理。
使用场景:
- 类适用于需要复杂行为和对象生命周期管理的情况。
- 结构体适合用于定义简单、小型的数据结构。
实践习题
枚举应用
- 创建一个Season枚举,包含四季,并编写程序根据当前季节输出相应活动。
public enum Season
{
Spring,
Summer,
Autumn,
Winter
}
public class Program
{
public static void Main(string[] args)
{
Season currentSeason = Season.Autumn;
switch (currentSeason)
{
case Season.Spring:
Console.WriteLine("Time for some gardening!");
break;
case Season.Summer:
Console.WriteLine("Let's go to the beach!");
break;
case Season.Autumn:
Console.WriteLine("Perfect time for hiking.");
break;
case Season.Winter:
Console.WriteLine("Get cozy with hot chocolate.");
break;
}
}
}
结构体设计
- 定义一个Rectangle结构体,包含宽度和高度属性,实现计算面积的方法。
public struct Rectangle
{
public double Width { get; set; }
public double Height { get; set; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
public double Area()
{
return Width * Height;
}
}
public class Program
{
public static void Main(string[] args)
{
Rectangle rect = new Rectangle(5.0, 10.0);
Console.WriteLine($"Area of rectangle: {rect.Area()}");
}
}
类与结构体的选择
- 考虑银行账户信息的存储需求,讨论采用类还是结构体更合适,并解释理由。
对于银行账户信息,采用类更为合适,因为:
- 银行账户可能涉及复杂行为(如交易历史、计息)。
- 类支持继承和多态,可以扩展功能。
- 类适合处理生命周期较长的对象,允许共享和修改状态。
今天就到这里,想了想还是直接把习题答案给上去。