在C#中如何设计一个商品类,使其在价格变化时能够触发事件通知,同时包含构造函数、属性和方法?
时间: 2024-11-21 11:33:39 浏览: 17
为了设计一个能够响应价格变化事件的商品类,我们需要利用C#中的类、属性、构造函数、事件和委托等概念。这里我们以创建一个名为`Commodity`的商品类为例进行说明:
参考资源链接:[C#编程:创建与使用商品类(Commodity)示例](https://wenku.csdn.net/doc/86bsqnc1kb?spm=1055.2569.3001.10343)
首先,定义一个带有两个构造函数的类:一个无参构造函数用于创建商品实例,另一个带参数的构造函数用于初始化商品的基本信息。例如:
```csharp
public class Commodity
{
public string Id { get; private set; }
public string Name { get; private set; }
private decimal price;
public decimal Price
{
get { return price; }
set
{
if (price != value)
{
decimal oldPrice = price;
price = value;
OnPriceChanged(oldPrice, price);
}
}
}
public string Address { get; set; }
public event EventHandler<PriceChangedEventArgs> PriceChanged;
public Commodity() { }
public Commodity(string id, string name)
{
Id = id;
Name = name;
}
protected virtual void OnPriceChanged(decimal oldValue, decimal newValue)
{
PriceChanged?.Invoke(this, new PriceChangedEventArgs(oldValue, newValue));
}
}
```
在上面的代码中,`Price`属性具有一个`set`访问器,它在价格改变时会检查新旧价格是否不同。如果价格发生变化,它将调用`OnPriceChanged`方法,该方法负责触发`PriceChanged`事件。
`PriceChanged`是一个事件,它使用`EventHandler<PriceChangedEventArgs>`委托类型,其中`PriceChangedEventArgs`是一个自定义的事件参数类,用于封装价格变化的相关信息。
我们还需要定义事件参数类,它可能如下所示:
```csharp
public class PriceChangedEventArgs : EventArgs
{
public decimal OldPrice { get; }
public decimal NewPrice { get; }
public PriceChangedEventArgs(decimal oldPrice, decimal newPrice)
{
OldPrice = oldPrice;
NewPrice = newPrice;
}
}
```
在客户端代码中,我们可以订阅并响应`PriceChanged`事件,以便在价格变化时执行特定操作:
```csharp
var commodity = new Commodity(
参考资源链接:[C#编程:创建与使用商品类(Commodity)示例](https://wenku.csdn.net/doc/86bsqnc1kb?spm=1055.2569.3001.10343)
阅读全文