各位大大好, 弟正在研讀Effective C#, 目前看到了ITEM 6, 其中提到了
struct是value type, class是reference type, 它其中有一段碼弟十分不解,
如下:
public struct Employee
{
private string _name;
private int _ID;
private decimal _salary;
// Properties elided
public void Pay(BankAccount b)
{
b.Balance += _salary;
}
}
書上說它一開始是用以上的value type( struct ), 並且程式都運作的十分正常,
但後來隨著時間過去, 發現還有其他的員工類別, 如銷售人員可取得佣金, 管理
人員可取得加給, 於是開發人員決定把上面的結構體, 改用class去定義, 如此
一來就變成了Reference type, 如下所示:
public class Employee
{
private string _name;
private int _ID;
private decimal _salary;
// Properties elided
public virtual void Pay(BankAccount b)
{
b.Balance += _salary;
}
}
書上說這樣會產生很大的問題, 比如說:
Employee e1 = Employees.Find("CEO");
e1.Salary += Bonus; // Add one time bonus
e1.Pay(CEOBankAccount);
請問為何從struct改成用class定義後, 上面的碼會產生問題? 書上是說e1 這位CEO
的薪水被永久性地提昇了, 有大大可以出來解釋一下嗎?
感恩您的回答
※ 編輯: horngsh 來自: 59.126.240.23 (05/07 17:25)
推 huge:我猜是call by value以及call by reference的問題 05/07 18:12
→ huge:不過都沒有把加的錢記錄下來,怎麼會永久提昇? ?_? 05/07 18:12