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 @   一只桔子2233  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示