另一種event的寫法 Ex: EventHandler<DinosaursChangedEventArgs>

本文介绍了一个自定义的恐龙字符串集合类,该类扩展了.NET Framework中的`Collection<T>`泛型集合类,并实现了自定义事件通知机制。每当集合发生添加、删除、替换或清空操作时,都会触发`Changed`事件,通过`DinosaursChangedEventArgs`参数传递具体的变化类型及变化项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using  System;
using  System.Collections.Generic;
using  System.Collections.ObjectModel;

public   class  Dinosaurs : Collection < string >
{
    
public   event  EventHandler < DinosaursChangedEventArgs >  Changed;

    
protected   override   void  InsertItem( int  index,  string  newItem)
    {
        
base .InsertItem(index, newItem);

        EventHandler
< DinosaursChangedEventArgs >  temp  =  Changed;
        
if  (temp  !=   null )
        {
            temp(
this new  DinosaursChangedEventArgs(
                ChangeType.Added, newItem, 
null ));
        }
    }

    
protected   override   void  SetItem( int  index,  string  newItem)
    {
        
string  replaced  =  Items[index];
        
base .SetItem(index, newItem);

        EventHandler
< DinosaursChangedEventArgs >  temp  =  Changed;
        
if  (temp  !=   null )
        {
            temp(
this new  DinosaursChangedEventArgs(
                ChangeType.Replaced, replaced, newItem));
        }
    }

    
protected   override   void  RemoveItem( int  index)
    {
        
string  removedItem  =  Items[index];
        
base .RemoveItem(index);

        EventHandler
< DinosaursChangedEventArgs >  temp  =  Changed;
        
if  (temp  !=   null )
        {
            temp(
this new  DinosaursChangedEventArgs(
                ChangeType.Removed, removedItem, 
null ));
        }
    }

    
protected   override   void  ClearItems()
    {
        
base .ClearItems();

        EventHandler
< DinosaursChangedEventArgs >  temp  =  Changed;
        
if  (temp  !=   null )
        {
            temp(
this new  DinosaursChangedEventArgs(
                ChangeType.Cleared, 
null null ));
        }
    }
}

//  Event argument for the Changed event.
//
public   class  DinosaursChangedEventArgs : EventArgs
{
    
public   readonly   string  ChangedItem;
    
public   readonly  ChangeType ChangeType;
    
public   readonly   string  ReplacedWith;

    
public  DinosaursChangedEventArgs(ChangeType change,  string  item,
        
string  replacement)
    {
        ChangeType 
=  change;
        ChangedItem 
=  item;
        ReplacedWith 
=  replacement;
    }
}

public   enum  ChangeType
{
    Added,
    Removed,
    Replaced,
    Cleared
};

public   class  Demo
{
    
public   static   void  Main()
    {
        Dinosaurs dinosaurs 
=   new  Dinosaurs();

        dinosaurs.Changed 
+=  ChangedHandler;

        dinosaurs.Add(
" Psitticosaurus " );
        dinosaurs.Add(
" Caudipteryx " );
        dinosaurs.Add(
" Compsognathus " );
        dinosaurs.Add(
" Muttaburrasaurus " );

        Display(dinosaurs);

        Console.WriteLine(
" \nIndexOf(\ " Muttaburrasaurus\ " ): {0} " ,
            dinosaurs.IndexOf(
" Muttaburrasaurus " ));

        Console.WriteLine(
" \nContains(\ " Caudipteryx\ " ): {0} " ,
            dinosaurs.Contains(
" Caudipteryx " ));

        Console.WriteLine(
" \nInsert(2, \ " Nanotyrannus\ " ) " );
        dinosaurs.Insert(
2 " Nanotyrannus " );

        Console.WriteLine(
" \ndinosaurs[2]: {0} " , dinosaurs[ 2 ]);

        Console.WriteLine(
" \ndinosaurs[2] = \ " Microraptor\ "" );
        dinosaurs[
2 =   " Microraptor " ;

        Console.WriteLine(
" \nRemove(\ " Microraptor\ " ) " );
        dinosaurs.Remove(
" Microraptor " );

        Console.WriteLine(
" \nRemoveAt(0) " );
        dinosaurs.RemoveAt(
0 );

        Display(dinosaurs);
    }

    
private   static   void  Display(Collection < string >  cs)
    {
        Console.WriteLine();
        
foreach  ( string  item  in  cs)
        {
            Console.WriteLine(item);
        }
    }

    
private   static   void  ChangedHandler( object  source,
        DinosaursChangedEventArgs e)
    {

        
if  (e.ChangeType  ==  ChangeType.Replaced)
        {
            Console.WriteLine(
" {0} was replaced with {1} " , e.ChangedItem,
                e.ReplacedWith);
        }
        
else   if  (e.ChangeType  ==  ChangeType.Cleared)
        {
            Console.WriteLine(
" The dinosaur list was cleared. " );
        }
        
else
        {
            Console.WriteLine(
" {0} was {1}. " , e.ChangedItem, e.ChangeType);
        }
    }
}
posted on 2009-09-23 12:25 進哥 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/euleramon/archive/2009/09/23/1572465.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值