using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Collections.ObjectModel;
namespace KeyedCollectionDemo
{
class Program
{
static void Main(string[] args)
{
SimpleOrder my = new SimpleOrder();
my.Changed += new EventHandler<SimpleOrderChangedEventArgs>(AddEvent);
my.Add(new OrderItem(1001,"hello",1,1));
my.Add(new OrderItem(1002, "hells", 1, 1));
my.Add(new OrderItem(1003, "hellss", 1, 1));
Console.WriteLine(my[1002].ToString());
my.Insert(2,new OrderItem(1004,"hellssss1",1,1));
foreach (OrderItem m in my)
{
Console.WriteLine(m.ToString());
}
Console.ReadKey();
}
public static void AddEvent(object o, SimpleOrderChangedEventArgs s)
{
Console.WriteLine("事件触发了");
}
}
public class SimpleOrder : KeyedCollection<int, OrderItem>
{
public event EventHandler<SimpleOrderChangedEventArgs> Changed;
public SimpleOrder()
: base()
{ }
protected override int GetKeyForItem(OrderItem item)
{
return item.PartNumber;
}
protected override void InsertItem(int index, OrderItem newitem)
{
base.InsertItem(index, newitem);
EventHandler<SimpleOrderChangedEventArgs> temp = Changed;
if (newitem != null)
{
temp(this, new SimpleOrderChangedEventArgs(ChangeType.Added, newitem, null));
}
}
}
public class SimpleOrderChangedEventArgs : EventArgs
{
private OrderItem _changedItem;
private ChangeType _changType;
private OrderItem _replacedWith;
public SimpleOrderChangedEventArgs(ChangeType change,
OrderItem item, OrderItem replacement)
{
_changType = change;
_changedItem = item;
_replacedWith = replacement;
}
}
public enum ChangeType
{
Added,
Removed,
Replaced,
Cleared
};
public class OrderItem
{
public readonly int PartNumber;
public readonly string Description;
public readonly double UnitPrice;
private int _quantity = 0;
public OrderItem(int partNumber, string description, int quantity, double unitPrice)
{
this.PartNumber = partNumber;
this.Description = description;
this.Quantity = quantity;
this._quantity = quantity;
}
public int Quantity
{
get { return _quantity; }
set
{
if (value < 0)
{
throw new ArgumentException("Quantity cannot be negative.");
}
else
{
_quantity = value;
}
}
}
public override string ToString()
{
return String.Format(
"{0,9} {1,6} {2,-12} at {3,8:#,###.00} = {4,10:###,###.00}",
PartNumber, _quantity, Description, UnitPrice,
UnitPrice * _quantity);
}
}
}