利用若名委托实现单行执行
这是本人第一次写博客,做了好久的潜水员,只因自知自己没有什么能力,又不敢在各位高手面前出丑。第一编写可能不是什么新东西,请大家不要见笑。
若名委托,相信有好多人都用过。只是在观察者模式中,希望把所执行的函数返回的值进行比较,我都是第一次使用到。
就比如下边就是一个比较。
这是一个委托类
namespace UnityDemo
{
public delegate bool ObserverDelegate<T>(T t);
public class test
{
private ObserverDelegate<int> observerList;
public event ObserverDelegate<int> Observers
{
add //注册观察者
{
observerList += value;
}
remove//移除观察者
{
observerList -= value;
}
}
public bool onHandler(int i)
{
//if (this.observerList != null)
//{
// observerList(i);
//}
foreach (ObserverDelegate<int> od in this.observerList.GetInvocationList())
{
if (!od(i))
{
return false ;
}
}
return true;
}
}
}
这是进行比较的实例:
namespace UnityDemo
{
class Program
{
static void Main(string[] args)
{
test t = new test();
t.Observers += new ObserverDelegate<int>(x=> {
Console.Write("is larger 5:" + (x > 4).ToString () +"\n");
return x > 4; });
t.Observers += new ObserverDelegate<int>(x =>
{
Console.Write("is larger 6:" + (x > 6).ToString () + "\n");
return x > 6;
});
t.Observers += new ObserverDelegate<int>(x =>
{
Console.Write("is larger 5:" + (x > 4).ToString() + "\n");
return x > 4;
});
bool r = t.onHandler(5);
Console.ReadLine();
}
}
}
每个若名方法都要经过onHandler这个函数,而委托方法都会使用GetInvocationList这个函数来得到若名方法,从而来比较!