05. 阿宝陪你学C#【方法】:面馆里的 “烹饪招式” 全解析

阿宝陪你学C#【函数(方法)】:面馆里的 “烹饪招式” 全解析

哈喽哇!各位编程小侠客们!我是你们的老朋友 —— 功夫熊猫阿宝!之前带大家认识了 C# 里类这个超厉害的 “菜品秘方”,今天咱们接着探索!要说类是秘方,那函数(方法)就是秘方里的 “烹饪招式”!在 C# 编程的江湖里,掌握函数(方法)就像我掌握了 “熊猫十八翻”,能把普通的数据食材,变成超厉害的 “代码美食”!快搬好小板凳,听我细细道来!

一、函数(方法):烹饪招式的神秘面纱

在 C# 的世界里,函数(方法)是类中定义的一段代码,专门用来执行特定的操作,就像面馆师傅们各有拿手的烹饪招式,有的擅长揉面,有的擅长调汤。你可以把函数(方法)想象成一个 “代码小助手”,只要你一声令下,它就会按照设定好的步骤去完成任务,比如计算面条的价格、打印订单信息等等。

在类里面,我们这样定义一个简单的方法:

class NoodleShop
{
   public void WelcomeCustomer()
   {
       Console.WriteLine("欢迎光临阿宝的面馆!快来尝尝美味的面条吧!");
   }
}

在上面的代码中,WelcomeCustomer就是一个方法,它属于NoodleShop类。public是访问修饰符,决定了这个方法能不能被外面的代码调用;void表示这个方法执行完后不会返回任何结果,就像师傅热情招呼顾客,不需要顾客给啥 “回报”;方法名后面的小括号(),在后面我们会讲到它的大用处!

二、函数(方法)的 “招式分解”:参数与返回值

2.1 参数:烹饪所需的 “食材清单”

就像师傅做菜需要准备好各种食材,很多方法也需要 “食材”—— 参数,才能完成任务。参数是方法接收外部数据的 “小窗口”,把需要处理的数据传递给方法。

比如,我们要定义一个计算面条总价的方法,就需要知道面条的单价和数量:

class NoodleShop
{
   public decimal CalculateTotalPrice(decimal unitPrice, int quantity)
   {
       return unitPrice * quantity;
   }
}

CalculateTotalPrice方法中,decimal unitPriceint quantity就是参数,它们就像告诉师傅 “面条单价是多少”“顾客点了几碗”。当我们调用这个方法时,就要按照顺序 “递上” 这些参数:

NoodleShop shop = new NoodleShop();
decimal total = shop.CalculateTotalPrice(18.00m, 3);
Console.WriteLine($"面条总价是:{total}元");

这里的18.00m3,就是实际传递给方法的参数值,方法拿到这些值后,就能算出总价啦!

2.2 返回值:烹饪完成的 “美味成果”

很多时候,方法执行完任务后,会给我们带回 “成果”,这就是返回值。就像师傅做完菜,会端上一盘香喷喷的美食。在方法定义中,返回值类型告诉我们这个方法执行完会 “端回” 什么类型的数据。

上面的CalculateTotalPrice方法,返回值类型是decimal,表示它计算完后会返回一个小数类型的总价。方法里用return关键字把计算好的结果 “送出来”,调用方法的代码就能接住这个结果进行下一步操作啦。

如果方法不需要返回任何结果,就像前面的WelcomeCustomer方法,返回值类型就是void,这种方法里可以没有return语句,或者用return;直接结束方法执行。

三、函数(方法)的 “进阶招式”

3.1 方法重载:同一招式的不同变化

在面馆里,师傅们同样的揉面招式,根据不同的面团,手法会有些变化。在 C# 里,方法重载就像这样,同一个类中可以有多个名字相同,但参数列表不同的方法。

比如,我们的面馆推出了新活动,针对不同顾客有不同的计算总价方式:

class NoodleShop
{
   public decimal CalculateTotalPrice(decimal unitPrice, int quantity)
   {
       return unitPrice * quantity;
   }

   public decimal CalculateTotalPrice(decimal unitPrice, int quantity, decimal discount)
   {
       decimal originalPrice = unitPrice * quantity;
       return originalPrice * (1 - discount);
   }
}

这里有两个CalculateTotalPrice方法,第一个方法只根据单价和数量计算总价,第二个方法多了一个discount(折扣)参数,能计算打折后的价格。编译器会根据我们调用方法时传递的参数个数和类型,自动选择合适的方法,就像师傅根据面团情况,自动切换揉面手法!

3.2 递归方法:自己调用自己的 “神奇循环”

递归方法就像面馆里的 “无限传送带”,一个方法会自己调用自己,不过得有个 “刹车” 条件,不然就会一直转下去,程序可就 “晕头转向” 啦!
我们用递归方法来计算面条的 “累计制作数量”,假设每做一碗面,累计数量就增加,直到达到目标数量:

class NoodleShop
{
   public int CalculateTotalMade(int targetCount, int currentCount = 0)
   {
       if (currentCount == targetCount)
       {
           return currentCount;
       }

       return CalculateTotalMade(targetCount, currentCount + 1);
   }


}

在这个CalculateTotalMade方法中,每次调用自己时,currentCount都会增加,当currentCount等于targetCount时,就停止递归,返回最终的累计数量。就像传送带送到目标位置,就自动停下!

3.3 扩展方法:给已有类 “偷师学艺”

扩展方法就像面馆的师傅向隔壁糕点店 “偷师”,给原本的类增加新的 “招式”,却不用修改原来类的代码!

假设我们有一个Noodle类,现在想给它增加一个判断面条是否煮好的方法:

static class NoodleExtensions
{
   public static bool IsNoodleCooked(this Noodle noodle, int cookingTime)
   {
       // 这里简单假设煮5分钟就好
       return cookingTime >= 5;
   }
}


class Noodle
{
   // 类的其他成员省略
}

NoodleExtensions静态类中定义的IsNoodleCooked就是扩展方法,this Noodle noodle是关键,它表示这个方法是给Noodle类 “扩展” 的。这样,我们就能像调用Noodle类原本的方法一样使用它了:

Noodle myNoodle = new Noodle();
bool isCooked = myNoodle.IsNoodleCooked(6);
Console.WriteLine($"面条煮好了吗?{isCooked}");

四、函数(方法)的 “隐藏规则”

4.1 作用域与生命周期

方法里定义的变量,就像厨房里临时用的工具,出了这个方法 “地盘”(作用域),就不能用了。比如在方法里定义的int tempCount = 0;,方法执行完,tempCount就 “消失” 了,下次再调用方法,它又得重新 “出生”。

4.2 访问修饰符的 “权限密码”

前面提到的public只是访问修饰符的一种,还有private(只有类内部能用,就像面馆的秘制酱料配方)、protected(类和它的子类能用,像家族传承的烹饪技巧)等等。合理设置访问修饰符,能保护我们的代码 “秘方”,防止被随意乱用!

4.3 与类和对象的 “亲密关系”

实例方法需要通过类的对象来调用,就像只有真正的面馆师傅,才能施展烹饪招式;静态方法属于类本身,不需要创建对象,直接用类名就能调用,比如面馆的 “开店公告”,不需要具体哪个师傅,大家都知道。

五、总结:成为 “烹饪招式” 大师

到这里,C# 里函数(方法)的各种 “烹饪招式” 就都给大家展示完啦!从基础的参数、返回值,到进阶的重载、递归、扩展方法,每一种都有独特的用处。记住,函数(方法)是让代码动起来的关键,就像烹饪招式是做出美食的核心!
下次在编程江湖里闯荡,大胆运用这些招式,把数据食材变成超酷的 “代码大餐”!要是遇到啥 “卡壳” 的地方,别犹豫,来我的面馆,咱们边吃面条边研究!说不定吃着吃着,灵感就像面条一样,“嗖” 地一下全冒出来啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿蒙Armon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值