目标:如下程序,想要达到的目的是,属性Price的值需要利用Size的值来判断求出。
public class OrderEventArgs : EventArgs
{
public string Size { get; set; }
private int price;
public int Price
{
set
{
//this.price = value;
if(this.Size == "large")
{
this.price = 20;
}
}
get
{
return this.price;
}
}
}
遇到的问题:我在主程序中使用了如下方式,然而运行结果是错误的,得出是0。
OrderEventArgs orderEventArgs = new OrderEventArgs();
orderEventArgs.Size = "large";
Console.WriteLine(orderEventArgs.Price);
原因: 原因是在创建实例时调用了类的默认构造函数,此时Size的值为空,Price的值是0。之后执行赋值语句orderEventArgs.Size = "large"后Size属性里的逻辑才会运行,Size值也会刷新为large。而Price属性里的逻辑根本没有运行,因此结果显示是0。
解决方法: 将Price值刷新,虽然给Price赋值没有什么意义,但可以使其运行内部的逻辑来根据Size的值判断出Price的值,此时结果就可得出20,符合要求。以下两种方式的内部执行逻辑顺序完全相同。
OrderEventArgs orderEventArgs = new OrderEventArgs(){ Size = "large",Price = 99999};
OrderEventArgs orderEventArgs = new OrderEventArgs();
orderEventArgs.Size = "large";
orderEventArgs.Price = 99999;