各位大大好, 弟正在研读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)
1F:推 huge:我猜是call by value以及call by reference的问题 05/07 18:12
2F:→ huge:不过都没有把加的钱记录下来,怎麽会永久提昇? ?_? 05/07 18:12