解析.Net 4.0 中委托delegate的使用详解(2)


DoSomething @do = DoA;
@do -= DoB;


第一行代码我生命了@do并将DoA赋予它;第二行代码我尝试从@do中减去DoB,DoB并没有在@do的方法列表中存在,这样会发生什么情况呢?首先编译器没有报错,程序可以正常的编译;执行代码发现可以程序可以正常执行,调用@do委托时正确的执行了DoA方法;这说明了.Net包容了我们程序员犯的错,我们从委托变量中减去一个委托中并不包含的方法时,不会报错会正常的执行。
3. 对委托做减法,所有委托都减完了,会怎样呢?看如下代码

复制代码 代码如下:


DoSomething @do = new DoSomething(DoA) + new DoSomething(DoB);
@do -= DoA;
@do -= DoB;
@do(1);


这样的代码可以成功编译,但是在运行时会报NullReferenceException;这显然不是我们希望的,所以对委托做减法时要特别注意。

复制代码 代码如下:


<span>public delegate void DoIt(string task);

class Test
{
    static void Main(string[] args)
    {
        //DoIt声明,赋予一个参数更宽泛的方法是合法的
        DoIt doIt = new DoIt(DoItImpl);
        doIt("hello");
    }

    //比委托定义中的参数更宽泛,string类型可以隐式转换成object
    static void DoItImpl(object task)
    {
        Console.WriteLine("DoItImpl {0}",task);
    }
}
</span>


您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgxgs.html