學習重點
- 欄位的屬性
- 類別建構子
- ToString()方法
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Party_Planer
{
public partial class Form1 : Form
{
DinnerParty dinnerparty;//宣告dinnerparty是一個DinnerParty的變數。
public Form1()
{
InitializeComponent();
dinnerparty = new DinnerParty(5, false, true);
//設定dinnerparty是DinnerParty裡的一個物件,呼叫DinnerParty的建構子並給予初始值。
DisplayDinnerPartyCost();
}
private void DisplayDinnerPartyCost()
{
decimal Cost = dinnerparty.CalculateCost(healthyBox.Checked);
CostLabel.Text = Cost.ToString("c");
//ToString()方法可以將任何的變數轉換成字串,
//但假如你傳送"c"給ToString(),它會將值轉換成當地貨幣,在此轉換成台幣。
}
private void fancyBox_CheckedChanged(object sender, EventArgs e)
{
dinnerparty.CalculateCostOfDecorations(fancyBox.Checked);
DisplayDinnerPartyCost();
}
private void healthyBox_CheckedChanged(object sender, EventArgs e)
{
dinnerparty.SetHealthyOption(healthyBox.Checked);
DisplayDinnerPartyCost();
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
dinnerparty.NumberOfPeople = (int)numericUpDown1.Value;
//呼叫NumberOfPeople的set存取器。
DisplayDinnerPartyCost();
}
}
}
副程式碼(DinnerParty類別)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Party_Planer
{
public class DinnerParty
{
public const int CostOfFoodPerPerson = 25;
private int numberOfPeopele = 5;
//使用numberOfPeople的屬性。
public int NumberOfPeople
{
get//當numberOfPeople欄位被讀取時所使用的方法。
{
return numberOfPeopele;
}
set//當numberOfPeople欄位被設定時所使用的方法。
{
numberOfPeopele = value;
CalculateCostOfDecorations(fancyDecorations);
}
}
private bool fancyDecorations;
public decimal CostOfBeveragesPerPerson;
public decimal CostOfDecorations = 0;
//為DinnerParty類別增加建構子初始化私有欄位。
public DinnerParty(int numberOfPeople, bool healthyOption, bool fancyDecorations)
{
NumberOfPeople = numberOfPeopele;//觸發NumberOfPeople屬性的set方法。
this.fancyDecorations = fancyDecorations;
//等號左邊的this.fancyDecorations指的是DinnerParty類別裡面的fancyDecoration欄位,
//而等號右邊的fancyDecorations在這邊代表DinnerParty建構子裡面的參數。
SetHealthyOption(healthyOption);
CalculateCostOfDecorations(fancyDecorations);
}
public void SetHealthyOption(bool healthyOption)
{
if(healthyOption)
{
CostOfBeveragesPerPerson = 5.00M;
}
else
{
CostOfBeveragesPerPerson = 20.00M;
}
}
public void CalculateCostOfDecorations(bool fancy)
{
fancyDecorations = fancy;
if(fancy)
{
CostOfDecorations = (NumberOfPeople * 15.00M) + 50M;
//呼叫NumberOfPeople的get存取器。
}
else
{
CostOfDecorations = (NumberOfPeople * 7.50M) + 30M;
//呼叫NumberOfPeople的get存取器。
}
}
public decimal CalculateCost(bool healthyOption)
{
decimal totalCost = CostOfDecorations + ((CostOfBeveragesPerPerson + CostOfFoodPerPerson) * NumberOfPeople);
//呼叫NumberOfPeople的get存取器。
if (healthyOption)
{
return totalCost * .95M;
}
else
{
return totalCost;
}
}
}
}
Demo圖
一開始執行時的畫面
人數增為10人
勾選Healthy Option
取消Fancy decorations