父類
- CalFather 打折的父類 (抽象類)
- public abstract decimal GetTotalMoney(decimal realMoney);
子類
- CalNormal : CalFather 不打折的子類
- CalRate : CalFather 按折扣率打折的子類
- public decimal Rate { get; set; } //折扣率
- public CalRate(decimal rate){} //建立物件時,把折扣率傳進去,構造函數會幫我們賦值給屬性
- CalMN : CalFather 買M元 送N元
- public decimal M { get; set; } //買多少
- public decimal N { get; set; } //送多少
- public CalMN(decimal m, decimal n){} //建立物件時,把買多少,送多少傳進去,構造函數會幫我們把值給屬性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/// <summary>
/// 打折的父類
/// </summary>
abstract class CalFather
{
/// <summary>
/// 計算打折後應付多少錢
/// </summary>
/// <param name="realMoney">打折前應付的價錢</param>
/// <returns>打折後應付的價錢</returns>
public abstract decimal GetTotalMoney(decimal realMoney);
}
/// <summary>
/// 不打折 該多少錢就多少錢
/// </summary>
internal class CalNormal : CalFather
{
public override decimal GetTotalMoney(decimal realMoney)
{
return realMoney;
}
}
/// <summary>
/// 按折扣率打折
/// </summary>
internal class CalRate : CalFather
{
/// <summary>
/// 折扣率
/// </summary>
public decimal Rate { get; set; }
/// <summary>
///
/// </summary>
/// <param name="rate">折扣率</param>
public CalRate(decimal rate)
{
this.Rate = rate;
}
public override decimal GetTotalMoney(decimal realMoney)
{
return realMoney * this.Rate;
}
}
/// <summary>
/// 買M元 送N元
/// </summary>
internal class CalMN : CalFather
{
//買500送100
/// <summary>
/// 買多少
/// </summary>
public decimal M { get; set; }
/// <summary>
/// 送多少
/// </summary>
public decimal N { get; set; }
/// <summary>
/// 構造函式
/// </summary>
/// <param name="m">買多少</param>
/// <param name="n">送多少</param>
public CalMN(decimal m, decimal n)
{
this.M = m;
this.N = n;
}
/// <summary>
/// 計算買多少送多少的折扣
/// </summary>
/// <param name="realMoney"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public override decimal GetTotalMoney(decimal realMoney)
{
//600-100
//1000-200
//1200-200
if (realMoney >= this.M)
{
//如果買1000,有2個500,就要減200
return realMoney - (int)(realMoney / this.M) * this.N;
} else
{
return realMoney;
}
}
}