您的位置:首页 > 其它

实现事件只能注册一次,自定义事件访问器

2011-08-25 13:03 405 查看
直接上代码了,很简单的,一看就OK

using System;
using System.Collections.Generic;
using System.Text;

namespace DelegateTest
{
class Program
{

static void Main(string[] args)
{
Pig p = new Pig();
p.Single += new Pig.SingleDel(p_Single1);
p.Single += new Pig.SingleDel(p_Single2);
p.Mulit += new Pig.MulitDel(p_Mulit1);
p.Mulit += new Pig.MulitDel(p_Mulit2);

p.TriggerSingle();
p.TriggerMulit();

Console.Read();
}

static void p_Mulit1()
{
Console.WriteLine( "第一次注册Mulit ");
}
static void p_Mulit2()
{
Console.WriteLine( "第二次注册Mulit ");
}
static void p_Single1()
{
Console.WriteLine("第一次注册Single ");
}
static void p_Single2()
{
Console.WriteLine("第二次注册Single ");
}

}

public class Pig
{
public delegate void SingleDel(); //单播,只能被订阅一次(自定义访问器来实现)修改add里面的逻辑可以实现其它注册方式

public delegate void MulitDel();//多播,可以被订阅多次

public Pig()
{

}
private event SingleDel single;
public event SingleDel Single
{
add
{
if (single != null)
{
Delegate[] dels = single.GetInvocationList();
if (dels.Length > 0)
{
foreach (Delegate i in dels)
{
single = Delegate.Remove(single, i) as SingleDel;
}
}
single = Delegate.Combine(single, value) as SingleDel;
}
else
single += value;
}
remove
{
if (single == null)
return;
single -= value;
}
}
public event MulitDel Mulit;

public void TriggerSingle()
{
if (single != null)
single();

}
public void TriggerMulit()
{
if (Mulit != null)
Mulit();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: