C#事件的发布机制

event demo:

using System;

namespace EventDemoConsoleApplication

{

class Program

{

static void Main(string[] args)

{

Orange orange=new Orange();

Apple apple=new Apple();

Sail sail =new Sail();

Eat eat=new Eat();

FruitTranser fruitTransfer = new FruitTranser();

fruitTransfer.FruitTransferEvent += new FruitTranser.FruitEventHandler(sail.Deal);

fruitTransfer.FruitTransferEvent += new FruitTranser.FruitEventHandler(eat.Deal);

fruitTransfer.SetFruitEventArgsArrivingFruit(orange);

Console.WriteLine();

fruitTransfer.SetFruitEventArgsArrivingFruit(apple);

Console.WriteLine();

fruitTransfer.FruitTransferEvent -= new FruitTranser.FruitEventHandler(sail.Deal);

fruitTransfer.SetFruitEventArgsArrivingFruit(apple);

Console.ReadKey();

}

}

abstract public class Fruit

{

public string FruitName { get; protected set; }

}

class Apple:Fruit

{

public Apple()

{

this.FruitName="Apple";

}

}

class Orange:Fruit

{

public Orange()

{

this.FruitName="Orange";

}

}

public class FruitTranser

{

public int InstancCount { get; private set; }

public class FruitEventArgs : EventArgs

{

public Fruit thisFruit { get; private set; }

public FruitEventArgs(Fruit fruit)

{

thisFruit = fruit;

}

}

public delegate void FruitEventHandler(Object sender, FruitEventArgs args);

public event FruitEventHandler FruitTransferEvent;

protected virtual void OnFruitTransferEvent(FruitEventArgs e)

{

if (FruitTransferEvent != null)

{

this.InstancCount++;

FruitTransferEvent(this, e);

}

}

public void SetFruitEventArgsArrivingFruit(Fruit fruit)

{

FruitEventArgs e = new FruitEventArgs(fruit);

OnFruitTransferEvent(e);

}

}

abstract class FruitFactory

{

public void Deal(Object sender,FruitTranser.FruitEventArgs e)

{

Console.WriteLine("Event counter:{1}", ((FruitTranser)sender).GetType(), ((FruitTranser)sender).InstancCount);

DealFruit(e.thisFruit);

}

protected abstract void DealFruit(Fruit fruit);

}

class Sail : FruitFactory

{

protected override void DealFruit(Fruit fruit)

{

Console.WriteLine("Sail Fruit: {0}", fruit.FruitName);

}

}

class Eat : FruitFactory

{

protected override void DealFruit(Fruit fruit)

{

Console.WriteLine("Eat Fruit: {0}", fruit.FruitName);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值