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

    这是本人第一次写博客,做了好久的潜水员,只因自知自己没有什么能力,又不敢在各位高手面前出丑。第一编写可能不是什么新东西,请大家不要见笑。

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

这是一个委托类

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这个函数来得到若名方法,从而来比较!

posted @ 2008-05-04 17:37  dada7357  阅读(528)  评论(2编辑  收藏  举报