委托的简介(Delegate)

在.NET Framework中,委托是一种数据结构,它引用静态方法或者引用类实例该类的实例方法。
委托是委托类型的实例。只有当方法的签名与委托类型所指定的签名完全匹配时,委托才能引用方法。当委托引用实例方法时,委托储存对该方法入口点的引用及对称为目标的对象的引用,该对象是对其待用该方法的类的实例。实例方法的目标不能为空引用。当委托引用静态方法时,委托储存对该方法入口点的引用。静态方法的目标为空引用。

声明委托方法如下
public delegate void ProcessBookDelegate(book book);

声明一个新的委托类型时,每个委托类型都描述参数的数目和类型,以及它可以封装的方法的返回值类型。每当需要一组新的参数类型或新的返回值类型时,都必须声明一个新的委托类型。

实例化委托即在声明了委托类型后,必须创建委托对象并使之与特定方法关联。与所有其它对象类似,新的委托对象用NEW表达式创建,一旦创建了委托,它所关联到的方法便永不改变。

调用委托即在委托对象后,通常将委托对象传输给讲调用该委托的其他代码。通过委托对象的名称(后面跟着要传递给委托的参数,扩在括号内)调用委托对象。

下面有一个例子:

首先声明一个DelegateFeedBack类
public class DelegateFeedBack
{
    
public DelegateFeedBack()
    
{
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//


    }

    
public string PrintString(int intValue)
    
{
        
if (intValue > 0)
        
{
            
return "这是一个正数";
        }

        
if (intValue < 0)
        
{
            
return "这是一个负数";
        }

        
return "这是一个零";
    }

    
public string PrintUpDown(int intValue)
    
{
        
if (intValue > 0)
        
{
            
return intValue.ToString() + ">0";
        }

        
if (intValue < 0)
        
{
            
return intValue.ToString() + "<0";
        }

        
return intValue.ToString() + "=0";
    }

}


在页面中首先定义一个委托DelegatePring,携带一个整形参数

public delegate string DelegatePrint(int intValue);

接着在Page_Load里调用委托

    protected void Page_Load(object sender, EventArgs e)
    
{
        DelegateFeedBack myDlegate 
= new DelegateFeedBack();
        DelegatePrint printString 
= new DelegatePrint(myDlegate.PrintString);
        DelegatePrint printletter 
= new DelegatePrint(myDlegate.PrintUpDown);
        Response.Write(printString(
10)+"<br>");
        Response.Write(printletter(
-100+ "<br>");
        
    }

点此下载源代码