委托的简介(Delegate)
在.NET Framework中,委托是一种数据结构,它引用静态方法或者引用类实例该类的实例方法。
委托是委托类型的实例。只有当方法的签名与委托类型所指定的签名完全匹配时,委托才能引用方法。当委托引用实例方法时,委托储存对该方法入口点的引用及对称为目标的对象的引用,该对象是对其待用该方法的类的实例。实例方法的目标不能为空引用。当委托引用静态方法时,委托储存对该方法入口点的引用。静态方法的目标为空引用。
声明委托方法如下
public delegate void ProcessBookDelegate(book book);
声明一个新的委托类型时,每个委托类型都描述参数的数目和类型,以及它可以封装的方法的返回值类型。每当需要一组新的参数类型或新的返回值类型时,都必须声明一个新的委托类型。
实例化委托即在声明了委托类型后,必须创建委托对象并使之与特定方法关联。与所有其它对象类似,新的委托对象用NEW表达式创建,一旦创建了委托,它所关联到的方法便永不改变。
调用委托即在委托对象后,通常将委托对象传输给讲调用该委托的其他代码。通过委托对象的名称(后面跟着要传递给委托的参数,扩在括号内)调用委托对象。
下面有一个例子:
首先声明一个DelegateFeedBack类
在页面中首先定义一个委托DelegatePring,携带一个整形参数
接着在Page_Load里调用委托
点此下载源代码
在.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";
}
}
{
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>");
}
{
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>");
}
点此下载源代码