C#事件是一种更为安全的委托,事件只能在事件对象内部调用,外部类如果使用只能对事件的进行【-=】和【+=】操作。下面示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace PriceText
{
public class PriceChangeEventArges : EventArgs
{
public readonly decimal LastPrice;
public readonly decimal NewPrice;
public PriceChangeEventArges(decimal lastPrice, decimal newPrice)
{
this.LastPrice = lastPrice;
this.NewPrice = newPrice;
}
}
public class Stock
{
string symbol;
decimal price;
public event EventHandler<PriceChangeEventArges> PriceChanged;
public decimal Price
{
get { return price; }
set
{
if (this.price==value)
{
return;
}
decimal oldPrice = price;
price = value;
OnPriceChangeEventArges(new PriceChangeEventArges (oldPrice,price));
}
}
public Stock(string symbolStr)
{
this.symbol = symbolStr;
}
protected virtual void OnPriceChangeEventArges(PriceChangeEventArges e)
{
if (PriceChanged != null)
{
PriceChanged.Invoke(this, e);
}
}
}
class Program
{
static void Main(string[] args)
{
Stock stock = new Stock("MSF");
stock.PriceChanged += new EventHandler<PriceChangeEventArges>(stock_PriceChanged);
stock.Price = 120;
stock.Price = 10;
Console.Read();
}
static void stock_PriceChanged(object sender, PriceChangeEventArges e)
{
Console.Write("线程ID"+Thread.CurrentThread.ManagedThreadId);
Console.WriteLine();
Console.WriteLine("触发事件"+e.LastPrice+e.NewPrice);
}
}
}