06. 阿宝陪你学C#【类的高级应用】:面馆经营的 “绝密进阶手册”

阿宝陪你学C#【类的高级应用】:面馆经营的 “绝密进阶手册”

嘿哟嘿哟!各位编程江湖的小伙伴们,我是你们的好朋友阿宝!前面带大家学了不少 C# 的 “功夫招式”,从类型食材到函数烹饪,那可都是基础中的基础!今天咱们直接放大招,翻开 C# 类的 “绝密进阶手册”—— 类的高级应用!这就好比经营面馆,光会煮面可不够,还得学会管理秘方、调配资源、服务顾客!快跟上,看我给你细细拆解!

一、成员修饰符:面馆规矩的 “守护者”

在我们面馆里,有些规矩是给所有顾客看的,有些是只有后厨知道的秘密。C# 里的成员修饰符,就是给类成员设定这些 “规矩” 的!

  • public:敞开大门的招牌菜:用public修饰的成员,就像面馆门口大大的招牌,所有人都能看到、都能享用。比如public void ShowMenu()方法,外面的顾客随时可以调用它查看菜单。
  • private:锁在保险柜里的秘制酱料private修饰的成员,藏得严严实实,只有类自己能访问。像private string secretRecipe,记录着独家面条酱料配方,绝不能被外人拿到!
  • protected:家族传承的特殊手艺protected修饰的成员,就像只传给面馆家族后辈的特殊揉面手法,类本身和它的子类可以使用。
  • internal:店内员工的专属规则internal修饰的成员,只有同一个程序集(可以理解为同一家连锁面馆的不同分店)内的代码能访问,对外保密!
class NoodleShop
{
   public void OpenShop() { /* 开店营业 */ }
   private string specialSauce = "绝密酱料配方";
   protected void TeachCraft() { /* 传授手艺 */ }
   internal void StaffOnlyOperation() { /* 员工专属操作 */ }
}

二、实例类成员 vs 静态成员:面馆里的 “个人绝活” 与 “公共设施”

2.1 实例类成员:每个师傅的 “个人绝活”

实例类成员就像面馆里每位师傅的独特烹饪手法,必须先 “请” 出这位师傅(创建对象),才能施展。比如每个面条订单对象都有自己的CalculateOrderPrice()方法,根据顾客点的不同面条算出价格。

class NoodleOrder
{
   public decimal CalculateOrderPrice()
   {
       // 根据订单内容计算价格
       return 0;
   }
}


NoodleOrder order1 = new NoodleOrder();
decimal price1 = order1.CalculateOrderPrice();

2.2 静态成员:面馆里的 “公共设施”

静态成员属于整个面馆(类),不需要特定的师傅(对象)就能使用。比如NoodleShop.TotalCustomers静态字段,记录着进店的总顾客数;NoodleShop.ShowOpeningHours()静态方法,随时能告诉大家面馆的营业时间。

class NoodleShop
{
   public static int TotalCustomers = 0;
   public static void ShowOpeningHours()
   {
       Console.WriteLine("营业时间:早8点 - 晚10点");
   }
}


NoodleShop.ShowOpeningHours();


Console.WriteLine($"总顾客数:{NoodleShop.TotalCustomers}");

三、成员常量 vs 静态量:面馆里的 “固定招牌” 与 “可更新公告”

3.1 成员常量:雷打不动的 “固定招牌”

常量就像面馆门口永远不变的招牌,一旦定义,绝不能修改!比如const string SHOP_NAME = "阿宝的功夫面馆",从开店起就定下名字,谁也改不了!

class NoodleShop
{
   public const string SHOP_NAME = "阿宝的功夫面馆";
}

3.2 静态量:可以更新的 “公告栏”

静态变量虽然也属于类,但它的值可以像面馆的每日优惠公告一样,随时更新。比如static decimal TodayDiscount = 0.8m;,每天的折扣能根据活动调整。

class NoodleShop
{
   public static decimal TodayDiscount = 1.0m;
}

对比

  • 常量是 “铁打的营盘”,值永远固定;
  • 静态变量是 “流水的兵”,能按需改变,就像固定招牌和可更新公告的区别!

四、属性:食材的 “精致包装” 与 “智能管家”

属性就像面馆里食材的精致包装盒,不仅能存放数据,还能设置 “取用规则”!比如NoodleDish类的Price属性,既能获取价格,又能在设置价格时检查是否合理。

class NoodleDish
{
   private decimal price;
   public decimal Price
   {
       get { return price; }
       set
       {
           if (value > 0)
           {
               price = value;
           }
           else
           {
               Console.WriteLine("价格不能为负数!");
           }
       }
   }
}

NoodleDish dish = new NoodleDish();
dish.Price = 28; // 正常设置
dish.Price = -5; // 触发检查提示

五、构造函数:菜品的 “诞生仪式” 与 “开店准备”

5.1 实例构造函数:每道菜品的 “诞生仪式”

实例构造函数就像面馆里每道新菜品的诞生仪式,创建对象时自动启动,给对象设置初始状态。比如NoodleDish(string name, decimal price)构造函数,创建面条菜品时,就给它取好名字、定好价格。

class NoodleDish
{
   public string Name { get; set; }
   public decimal Price { get; set; }
   public NoodleDish(string name, decimal price)
   {
       Name = name;
       Price = price;
       Console.WriteLine($"新菜品 {Name} 诞生!");
   }
}


NoodleDish beefNoodle = new NoodleDish("招牌牛肉面", 32);

5.2 静态构造函数:面馆的 “开店准备”

静态构造函数只在类第一次被使用时执行一次,就像面馆每天开店前的准备工作,打扫卫生、准备食材。比如NoodleShop类的静态构造函数,初始化一些静态数据。

class NoodleShop
{
   public static int TotalTables;
   static NoodleShop()
   {
       TotalTables = 10; // 初始化桌子数量
       Console.WriteLine("面馆开始营业前准备...");
   }
}

六、对象初始化语句:快速 “组装” 菜品

对象初始化语句就像面馆的 “快速点餐” 服务,创建对象时能同时设置多个属性,不用分好几步!

class NoodleDish
{
   public string Name { get; set; }
   public decimal Price { get; set; }
}

NoodleDish spicyNoodle = new NoodleDish { Name = "麻辣小面", Price = 22 };

七、析构函数:对象的 “谢幕演出”

析构函数是对象的 “谢幕演出”,当对象不再被使用,要被垃圾回收时,它就会执行。比如NoodleOrder类的析构函数,在订单处理完后,清理相关资源。

class NoodleOrder
{
   ~NoodleOrder()
   {
       Console.WriteLine("订单已完成,清理资源...");
   }
}

八、readonly修饰符:只能看不能改的 “珍贵食谱”

readonly修饰的字段就像面馆里只能看不能改的珍贵食谱,在构造函数里赋值后,就再也不能修改!比如readonly string shopAddress,记录面馆地址,确定后不能随意变动。

class NoodleShop
{
   public readonly string shopAddress;
   public NoodleShop(string address)
   {
       shopAddress = address;
   }
}

九、this关键字:指向 “自己” 的 “面馆掌柜”

this关键字就像面馆掌柜指向自己,在类的方法里,用它明确表示访问类自己的成员。比如NoodleShop类的方法里,this.TotalCustomers就表示访问当前面馆对象的总顾客数字段。

class NoodleShop
{
   public int TotalCustomers;
   public void IncreaseCustomerCount()
   {
       this.TotalCustomers++;
   }
}

十、索引器:菜品清单的 “快速查找窗口”

索引器就像面馆菜品清单的快速查找窗口,通过类似数组下标的方式,快速访问类里的元素。比如NoodleShop类的索引器,能快速获取不同位置的菜品。

class NoodleShop
{
   private NoodleDish[] dishes = new NoodleDish[3];
   public NoodleDish this[int index]
   {
       get { return dishes[index]; }
       set { dishes[index] = value; }
   }
}

NoodleShop shop = new NoodleShop();
shop[0] = new NoodleDish("清汤面", 18);
NoodleDish dish = shop[0];

十一、分部类和分部方法:多人协作的 “面馆扩建工程”

分部类和分部方法就像面馆的扩建工程,多个程序员可以分工合作,分别编写类的不同部分,最后合在一起就是完整的类!

// 文件1:NoodleShop_Part1.cs
partial class NoodleShop
{
   public void OpenShop() { /* 开店逻辑 */ }
}


// 文件2:NoodleShop_Part2.cs
partial class NoodleShop
{
   public void CloseShop() { /* 关店逻辑 */ }
}

十二、总结:成为面馆经营 “大掌柜”

到这儿,C# 类的高级应用知识就全部解锁啦!从成员修饰符的规矩设定,到索引器的快速查找,每一个知识点都像面馆经营的关键技能!掌握这些,你就从 “面条师傅” 升级成 “面馆大掌柜” 啦!下次在编程江湖里遇到复杂问题,大胆运用这些 “进阶秘籍”,保准轻松拿下!要是还有疑惑,别客气,来我的面馆,咱们边吃边聊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿蒙Armon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值