07. 阿宝陪你学C#【类和继承】:面馆里的技艺传承与创新之路

阿宝陪你学C#【类和继承】:面馆里的技艺传承与创新之路

嘿呀!各位编程江湖的小伙伴们!我是你们的老朋友阿宝!前面咱们一起解锁了 C# 类的超多 “高级秘籍”,从成员修饰符到索引器,那可都是干货满满!今天,咱们要踏上一条充满传承与创新的道路 —— 类和继承!这就好比我们面馆里,老师傅把独特的烹饪技艺传给徒弟,徒弟们再在此基础上搞点新花样,让面馆的生意越来越红火!快跟上,听我好好唠一唠!

一、传承的起点:基类的诞生

在我们的编程面馆里,基类就像是面馆的 “老掌柜”,它有着丰富的经验和一套成熟的经营方法。基类定义了一些通用的属性和方法,就像老掌柜掌握着制作面条的基本配方和服务顾客的流程。

比如说,我们创建一个NoodleShop基类:

class NoodleShop
{
   public string ShopName { get; set; }
   public int TableCount { get; set; }
   public NoodleShop(string shopName, int tableCount)
   {
       ShopName = shopName;
       TableCount = tableCount;
   }

   public void WelcomeCustomer()
   {
       Console.WriteLine($"欢迎光临 {ShopName}!本店有 {TableCount} 张桌子,请随意就坐~");
   }

   public void ServeNoodles()
   {
       Console.WriteLine("为您上一碗热腾腾的面条,请慢用!");
   }
}

在这个NoodleShop基类里,ShopNameTableCount记录着面馆的名字和桌子数量,WelcomeCustomer方法用来热情招呼顾客,ServeNoodles方法则负责给顾客端面。这就是基类,它是传承的源头,为后续的发展奠定基础!

二、继承:徒弟们的 “学艺之路”

继承,就像是面馆里的年轻徒弟跟着老掌柜学艺,把老掌柜的本事都学过来!在 C# 里,一个类可以继承另一个类,继承后,子类就拥有了父类(基类)的非私有成员,这就叫 “传承”!

我们创建一个SpecialNoodleShop子类,让它继承NoodleShop基类:

class SpecialNoodleShop : NoodleShop
{
   public string SpecialDish { get; set; }
   public SpecialNoodleShop(string shopName, int tableCount, string specialDish) : base(shopName, tableCount)
   {
       SpecialDish = specialDish;
   }

   public void RecommendSpecialDish()
   {
       Console.WriteLine($"本店特色菜品是 {SpecialDish},强烈推荐您品尝!");
   }
}

这里的SpecialNoodleShop类通过:符号继承了NoodleShop类。它不仅拥有了ShopNameTableCount属性,以及WelcomeCustomerServeNoodles方法,还新增了自己的SpecialDish属性和RecommendSpecialDish方法。就像徒弟学艺之后,不仅学会了师傅的基础功夫,还开发出了自己的独特招式!

使用继承后的子类也很简单:

SpecialNoodleShop shop = new SpecialNoodleShop("阿宝特色面馆", 15, "神龙大侠牛肉面");
shop.WelcomeCustomer();
shop.RecommendSpecialDish();

运行代码,你会看到,子类轻松调用了从父类继承来的WelcomeCustomer方法,也能使用自己特有的RecommendSpecialDish方法,这就是继承的神奇之处!

三、重写:徒弟的 “创新改良”

徒弟们学艺之后,总想着搞点新花样,对师傅教的招式进行改良,这在 C# 里就叫重写!当父类的方法不能满足子类的特殊需求时,子类可以重写父类的方法,按照自己的方式来实现。

NoodleShop基类里,我们把ServeNoodles方法改成虚方法,为子类重写做准备:

class NoodleShop
{
   // 其他成员省略...
   public virtual void ServeNoodles()
   {
       Console.WriteLine("为您上一碗热腾腾的面条,请慢用!");
   }
}

virtual关键字表示这个方法可以被子类重写。然后在SpecialNoodleShop子类中重写这个方法:

class SpecialNoodleShop : NoodleShop
{
   // 其他成员省略...
   public override void ServeNoodles()
   {
       Console.WriteLine($"为您精心呈上特色 {SpecialDish},祝您用餐愉快!");
   }
}

override关键字表明这是对子类中虚方法的重写。当我们调用子类的ServeNoodles方法时:

SpecialNoodleShop shop = new SpecialNoodleShop("阿宝特色面馆", 15, "神龙大侠牛肉面");

shop.ServeNoodles();

输出的就是子类重写后的内容!重写让子类在继承的基础上,实现了个性化的创新,就像徒弟把师傅的招式改良得更厉害!

四、抽象类:神秘的 “武林秘籍总纲”

抽象类就像是一本神秘的 “武林秘籍总纲”,它只给出一些抽象的概念和方法,具体的实现要靠后面的子类来完成。抽象类不能直接创建对象,必须有子类继承它并实现抽象方法才行。

我们定义一个抽象的FamousNoodleShop类:

abstract class FamousNoodleShop
{
   public abstract void MakeFamousNoodles();
   public void IntroduceShop()
   {
       Console.WriteLine("这是一家著名的面馆,有着独特的面条制作工艺!");
   }
}

abstract关键字表示这是一个抽象类,MakeFamousNoodles是抽象方法,它只有声明,没有具体实现。然后创建一个子类LegendaryNoodleShop来继承并实现抽象方法:

class LegendaryNoodleShop : FamousNoodleShop
{
   public override void MakeFamousNoodles()
   {
       Console.WriteLine("使用独家秘方,制作出绝世美味的面条!");
   }
}

通过继承和重写,子类让抽象类的抽象方法有了实际意义。抽象类就像给子类指明了方向,让它们在统一的框架下进行创作!

五、接口:跨门派的 “技艺交流大会”

接口和继承不太一样,它更像是一场跨门派的 “技艺交流大会”,规定了一系列的 “标准动作”,只要符合这些标准,不管你是哪个门派(类)都能参加!

我们定义一个ICleanable接口,规定类必须具备 “打扫卫生” 的能力:

interface ICleanable
{
   void CleanShop();
}

然后让NoodleShop类实现这个接口:

class NoodleShop : ICleanable
{
   // 其他成员省略...
   public void CleanShop()
   {
       Console.WriteLine("认真打扫面馆,让环境焕然一新!");
   }
}

一个类可以实现多个接口,这就好比一个人可以同时掌握多种门派的功夫,大大增强了类的功能和灵活性!

六、总结:在传承与创新中成长

到这里,C# 里类和继承的知识就讲完啦!从基类的传承,到子类的创新重写,再到抽象类和接口的神奇作用,每一个知识点都像是面馆发展过程中的关键环节!掌握了这些,你在编程江湖里就拥有了强大的 “传承与创新” 之力!

下次遇到复杂的编程问题,不妨试试用继承和接口的思路,让代码在传承中优化,在创新中升级!要是还有啥不懂的,别犹豫,来我的面馆,咱们边吃面条边探讨,保准让你豁然开朗!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿蒙Armon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值