Refactor之Encapsulate Field
在以下的代码中,balance作为public的字段,是一段不好的代码,需要封装该字段。
// in this class, balance is a public field
public class SaverAccount
{
public decimal balance;
public void PayIn(decimal amount)
{
balance += amount;
}
public void Withdraw(decimal amount)
{
balance -= amount;
}
public string GetBalance()
{
return "balance: " + balance.ToString();
}
}
class Program
{
static void Main(string[] args)
{
SaverAccount s = new SaverAccount();
s.balance = 1000;
}
}
1. 选取要封装的字段。
2. 右键单击选取的字段。
3. 填写属性的名字;
External 意思是只对SaverAccount类外对字段balance的直接引用修改为对新属性Balance的引用。
All意思是不仅对SaverAccount类外对字段balance的直接引用修改,而且对SaverAccount类内对字段balance的引用也修改为对Balance的引用。
4. 点击OK后,弹出预览窗口
5. 点击Apply后,代码被修改为
// in this class, Balance is a public field
public class SaverAccount
{
private decimal balance;
public decimal Balance
{
get { return balance; }
set { balance = value; }
}
public void PayIn(decimal amount)
{
Balance += amount;
}
public void Withdraw(decimal amount)
{
Balance -= amount;
}
public string GetBalance()
{
return "Balance: " + Balance.ToString();
}
}
class Program
{
static void Main(string[] args)
{
SaverAccount s = new SaverAccount();
s.Balance = 1000;
}
}