看板 C_Sharp 關於我們 聯絡資訊
各位大大好, 弟正在研讀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