17、委托

当方法绑定到委托时,C#和CLR都允许引用类型的协变性和逆变性。
协变性是指方法能返回从委托的返回类型派生的一个类型。
逆变性是指方法获取的参数可以是委托的参数类型的基类。
例如下面这个委托
delegate object MyCallback(FileStream fs);
完全可以构造委托类型的一个实例并绑定具有以下原型的方法
string SomeMethod(Stream s)
在这里,SomeMethod的返回类型(string)派生自委托的返回类型(Object),这种协变性是允许的。
SomeMethod的参数类型(Stream)是委托的参数类型(FileStream)的基类,这种逆变性是允许的。
注意,只有引用类型才支持协变性和逆变性,值类型或void不支持

 

回调代码引用类定义的其它成员

 

        private static void UseLocal(int num)
        {
            int[] ints = new int[num];
            AutoResetEvent done = new AutoResetEvent(false);
            for (int i = 0; i < ints.Length; i++)
            {
                ThreadPool.QueueUserWorkItem(obj =>
                {
                    int a = (int)obj;
                    ints[a] = a * a;
                    if (Interlocked.Decrement(ref num) == 0)
                    {
                        done.Set();
                    }
                }, i);
            }
            done.WaitOne();
            for (int i = 0; i < ints.Length; i++)
            {
                Console.WriteLine("index {0} , ints={1}", i, ints[i]);
            }
        }

 

posted @ 2018-10-29 21:07  一只桔子2233  阅读(111)  评论(0编辑  收藏  举报