09. 阿宝陪你学C#【结构体】:面馆里的 “食材小套餐” 大揭秘

阿宝陪你学C#【结构体】:面馆里的 “食材小套餐” 大揭秘

嘿哟嘿哟!各位编程小能手们!我是你们的老朋友阿宝!咱们在 C# 编程的江湖里一路过关斩将,学完了运算符、表达式和语句这些超厉害的 “厨房工具” 和 “烹饪指南”,是不是感觉自己离编程大侠又近了一步?今天,阿宝我要带你们认识 C# 世界里一种超有趣的存在 —— 结构体!这就好比咱们面馆里的 “食材小套餐”,把几种常用的食材打包在一起,用起来方便又快捷!快跟我一起来揭开它的神秘面纱吧!

一、结构体是什么?面馆的 “食材小套餐”

在 C# 的世界里,结构体(struct)是一种值类型,它可以把多个相关的数据组合在一起,形成一个 “小团体”。就像咱们面馆为了方便顾客点餐和后厨准备食材,会把一些常用的食材搭配成小套餐,比如 “牛肉面套餐” 里就包含了面条、牛肉、青菜、酱料这些食材。

举个简单的例子,我们要记录面馆里一碗面的基本信息,包括面条的种类、重量和价格,就可以用结构体来定义:

struct NoodleInfo
{
   public string NoodleType;
   public int Weight;
   public decimal Price;
}

在上面的代码中,NoodleInfo就是一个结构体的名字,它里面包含了三个成员:NoodleType(面条种类,字符串类型)、Weight(重量,整数类型)和Price(价格,小数类型)。这就好比我们定义了一个 “面条信息小套餐”,把和面条相关的重要信息都装在了一起。

二、如何创建和使用结构体?制作与享用 “食材小套餐”

2.1 创建结构体变量

创建结构体变量就像从后厨拿出一份 “食材小套餐”。我们可以这样做:

NoodleInfo myNoodle;
myNoodle.NoodleType = "炸酱面";
myNoodle.Weight = 200;
myNoodle.Price = 18.00m;

这里先声明了一个NoodleInfo类型的变量myNoodle,就像预订了一份 “面条信息小套餐”,然后分别给它的成员赋值,相当于往套餐里放入具体的食材 —— 面条种类是 “炸酱面”,重量是 200 克,价格是 18 元。

还有一种更简洁的方式来初始化结构体变量,就像厨师直接端出一份配好的套餐:

NoodleInfo anotherNoodle = new NoodleInfo
{
   NoodleType = "红烧牛肉面",
   Weight = 250,
   Price = 22.00m
};

new关键字创建结构体实例,并在初始化时直接给各个成员赋值,这样一步就能拿到一份完整的 “面条信息小套餐”!

2.2 使用结构体变量

当我们有了结构体变量,就可以使用它里面的成员啦!这就像打开 “食材小套餐”,取出里面的食材来烹饪。

Console.WriteLine($"面条种类:{myNoodle.NoodleType}");
Console.WriteLine($"面条重量:{myNoodle.Weight} 克");
Console.WriteLine($"面条价格:{myNoodle.Price} 元");

上面的代码会把myNoodle这个结构体变量里的信息打印出来,就像告诉顾客这份面条的详细情况。

2.3 把结构体作为参数传递

在面馆里,师傅们会传递食材套餐来准备食物。在 C# 中,我们也可以把结构体作为参数传递给方法,就像把 “食材小套餐” 交给厨师去烹饪。

void PrintNoodleDetails(NoodleInfo noodle)
{
   Console.WriteLine($"面条详情:{noodle.NoodleType}{noodle.Weight} 克,{noodle.Price} 元");
}


PrintNoodleDetails(myNoodle);

这里定义了一个PrintNoodleDetails方法,它接受一个NoodleInfo类型的参数noodle。调用这个方法时,把myNoodle传递进去,方法就能使用结构体里的信息来打印面条的详细情况啦!

三、结构体的特点:“食材小套餐” 的独特之处

3.1 值类型的 “脾气”

结构体是值类型,这可是它一个很重要的特点!什么意思呢?就好比面馆里的食材小套餐,每一份都是独立的。当我们把一个结构体变量赋值给另一个结构体变量时,就像复制了一份新的套餐,两份套餐互不影响。

NoodleInfo originalNoodle = new NoodleInfo
{
   NoodleType = "阳春面",
   Weight = 150,
   Price = 12.00m
};

NoodleInfo copiedNoodle = originalNoodle;
copiedNoodle.NoodleType = "葱油面";

Console.WriteLine($"原始面条种类:{originalNoodle.NoodleType}");
Console.WriteLine($"复制后面条种类:{copiedNoodle.NoodleType}");

在上面的代码中,copiedNoodle复制了originalNoodle,当我们修改copiedNoodleNoodleType时,originalNoodleNoodleType并不会受到影响,它们各自保持独立,就像两份不同的食材套餐。

3.2 自带的 “简易构造函数”

结构体虽然不能像类那样定义多个复杂的构造函数,但它有一个默认的无参构造函数,而且我们还可以定义带参数的构造函数。这就好比食材小套餐,有一个默认的搭配方式,我们也可以根据顾客需求定制新的搭配。

struct NoodleOrder
{
   public string CustomerName;
   public NoodleInfo Noodle;
   public NoodleOrder(string customerName, NoodleInfo noodle)
   {
       CustomerName = customerName;
       Noodle = noodle;
   }
}

NoodleInfo specialNoodle = new NoodleInfo
{
   NoodleType = "担担面",
   Weight = 200,
   Price = 20.00m
};


NoodleOrder order = new NoodleOrder("阿宝的好朋友", specialNoodle);

这里的NoodleOrder结构体定义了一个带参数的构造函数,创建NoodleOrder实例时,就可以一次性把顾客名字和面条信息都设置好,超方便!

3.3 不能继承和被继承的 “独行侠”

结构体和类不一样,它不能继承其他类型,也不能被其他类型继承,是个 “独行侠”。就像面馆里的食材小套餐,它有自己固定的搭配模式,不会去继承别的套餐的特点,别的套餐也不能继承它的特点。虽然少了继承这一招,但它在自己的 “小天地” 里也能发挥很大的作用哦!

四、结构体 vs 类:“食材小套餐” 与 “特色菜品秘方” 的较量

在 C# 里,类我们已经很熟悉啦,它就像面馆里的特色菜品秘方,而结构体是食材小套餐,它们有啥区别呢?

4.1 类型不同

类是引用类型,结构体是值类型。引用类型就像师傅手里的菜品秘方,大家可以一起照着秘方做菜;值类型就像一份份独立的食材套餐,每份都是单独的。当我们把一个类的对象赋值给另一个对象时,其实是传递了一个 “指向秘方的指针”,两个对象操作的是同一份秘方;而结构体赋值是复制一份新的套餐。

4.2 构造函数和初始化

类可以有多个复杂的构造函数,还能有析构函数;结构体虽然也能有构造函数,但相对简单一些,而且没有析构函数。类的初始化方式更加灵活多样,结构体则更侧重于简单直接的 “打包” 初始化。

4.3 继承和多态

类支持继承和多态,可以实现代码的复用和扩展,就像特色菜品可以不断传承和改良;而结构体不支持继承和多态,专注于把相关数据组合在一起,简单高效。

4.4 内存分配

类的对象存储在堆上,结构体变量通常存储在栈上(在某些情况下也可能在堆上)。栈的操作速度快,堆相对灵活但操作稍微复杂一些。这就好比食材小套餐因为简单轻便,可以放在顺手的操作台上(栈),而特色菜品的制作过程复杂,需要更大的空间和更精细的管理(堆) 。

五、什么时候用结构体?“食材小套餐” 的最佳出场时机

虽然结构体和类各有特点,但在不同的场景下,它们的表现可不一样!一般来说,当满足以下这些条件时,结构体就是你的最佳选择:

  • 数据量小且简单:如果要组合的数据比较少,而且结构简单,就像简单的食材小套餐,用结构体再合适不过啦。比如记录一个坐标点(x坐标和y坐标),用结构体就能轻松搞定。
  • 频繁复制和传递:由于结构体是值类型,复制和传递时效率较高。就像面馆里的食材小套餐,厨师们可以快速传递和使用。当你需要频繁复制和传递数据 “小团体” 时,结构体就派上用场了。
  • 不需要继承和多态:如果不需要用到继承和多态这些高级特性,只想把相关数据打包在一起,结构体完全能满足需求。

六、总结:掌握 “食材小套餐” 的使用秘籍

好啦!C# 里的结构体就全部介绍完啦!从它像 “食材小套餐” 的定义,到创建、使用的方法,再到它独特的特点以及和类的区别,还有最佳使用场景,咱们都一一探索了一遍!

掌握了结构体这个超实用的知识,你在编程江湖里又多了一项厉害的技能!以后遇到需要把相关数据组合在一起的情况,就想想咱们面馆的 “食材小套餐”,合理选择结构体来解决问题!要是在学习过程中还有啥疑问,别客气,马上来阿宝的面馆,咱们一边吃着香喷喷的面条,一边把问题统统搞明白!相信你很快就能成为运用结构体的高手,在编程世界里大显身手!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿蒙Armon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值