技术开发 频道

利用若名委托实现单行执行


【IT168技术文档】
 
  若名委托,相信有好多人都用过。只是在观察者模式中,希望把所执行的函数返回的值进行比较,我都是第一次使用到。
就比如下边就是一个比较。

  这是一个委托类
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这个函数来得到若名方法,从而来比较!
0
相关文章