今日温习事件与委托,颇感迷惘,运用起来惆怅非常,逛园子时偶得一例,细细拼来,顿觉云开雾散,豁然开朗。不敢独享,呈于圈中供大家品尝。
我们的需求是这样的
某饭店老板让购物员去买菜,要买白菜和土豆,最后算出总价格。
老板说:“白菜的价格如果大于3.5元,就扣除白菜的杂质,扣除方法是 每1公斤减掉0.3公斤的杂质再买”。
购物员:“那土豆也是用这个规则么?”。
老板说:“土豆按什么规则,扣不扣杂质你自己决定”。
购物员暗想:“先去菜市场看看价格如果土豆的价格大于2.5元就扣杂质。。。”。
代码实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuyVegetable
{
//购买土豆委托
public delegate double delegateBuyMurphy(double price, double x);
//买菜类
public class BuyVegetable
{
double CabbageMoney;
double MurphyMoney;
// 买白菜方法
public void BuyCabbage(double price, double amount)
{
//这里老板制定了买白菜的方案
//如果买白菜的价格小于3,就不去杂,如果大于3去杂
if (price < 3)
{
CabbageMoney = price * amount;
}
else
{
CabbageMoney = (price - 0.3) * amount;
}
}
//因为只知道要买土豆,具体怎么买现在决定不了,所以只能定一个事件。
//白话:怎么买得到到了菜市场才能决定,可是无论怎么样都得有买土豆这回事儿,无论到了菜市场怎么决定都离不开“价格”和“数量”这两个条件
//这里就用到委托了,所以这个事件是委托类型的。 delegateBuyMurphy(委托的定义在下面)
public event delegateBuyMurphy eventBuyMurphy;
//所以购买土豆的方法是这样的
public void BuyMurphy(double price, double amount)
{
//这里只知道购买土豆,但是具体用怎么的规则购买,在购买的时候才能决定
MurphyMoney = eventBuyMurphy(price, amount);
}
//计算总金额
public double Stat()
{
return this.CabbageMoney + this.MurphyMoney;
}
}
class Program
{
static void Main(string[] args)
{
//使用上面的买菜类开始购买
BuyVegetable buyVegetable = new BuyVegetable();
//购买白菜,老板制定的死规则不能改直接用这个规则吧。
buyVegetable.BuyCabbage(3.6, 8);
//采购员问:土豆多少钱斤啊。
//售货员说:4.8。
//采购员说:等会,我先算算怎么买法
//购物员开始制定买土豆的规则buyVegetable_eventBuyMurphy
//制定完了,这个规则是买土豆这事儿的,当然得给买土豆这事儿
buyVegetable.eventBuyMurphy += new delegateBuyMurphy(buyVegetable_eventBuyMurphy);
//购买土豆
buyVegetable.BuyMurphy(4.8, 9);
//计算总价格
Console.WriteLine(buyVegetable.Stat());
}
//购买土豆的规则方法buyVegetable_eventBuyMurphy
static double buyVegetable_eventBuyMurphy(double price, double x)
{
if (price > 2.5)
{
return (price - 0.3) * x;
}
else
{
return price * x;
}
}
}
}