接触了一段时间的C#语言,大部分基础知识和其他面向对象语言差不多,还是能理解。最近学习了C#的一个特性:委托(Delegate),就自己掌握的内容做一个总结,有不对的地方敬请提出批评。
按照字面意思,我们也不难理解,委托就是把自己的事情托付给别人使用。 MSDN对委托的解释是: 委托 是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。我们先看一个例子,声明委托的语法为“delegate 返回值类型 委托名(参数列表)”:
我们再声明一个方法:
<span style="font-family:SimSun;font-size:18px;">public class DelegateDemo
{
public int Add(int number1,int number2)
{
return number1 + number2;
}
}</span>
在DelegateDemo这个类中的Add()方法,其返回值类型和参数类型,参数个数和我们上面声明的委托是一样的,那么,我们就可以用Add()方法对委托的参数进行赋值:
<span style="font-family:SimSun;font-size:18px;">DelegateDemo delegateDemo = new DelegateDemo();
DelegateHandler delegateHandler = delegateDemo.Add;
delegateHandler(1,2);</span>
我们总结一下使用委托的步骤:
1.首先声明一个委托;
2.实例化委托;
3.根据所声明的委托中的返回值类型,参数列表中参数的类型个参数个数,判断某方法是否可以使用委托;
4.如果满足3,则把该方法赋值给委托的实例(注意,只需赋方法名,不要加“()”);
5.像使用该方法一样使用委托。
通过上面的的例子,我简单理解为委托就是把方法当做参数用。有人也许不理解,这么麻烦,我为什么一定要用委托呢?其实,这就是委托的应用领域了: 委托的最终目的是把一个类的某个方法传递到另一个类中去调用而无须传递前一个类的对象。即,一个类的对象可以运行另一个类的对象中的方法,但前者无须持有后者的引用。 在某些情况下,为了运行某个类对象的某个方法,但无论以类变量、超类变量或是接口变量传递这个对象都不合适,此时使用委托最为合理。
按照字面意思,我们也不难理解,委托就是把自己的事情托付给别人使用。 MSDN对委托的解释是: 委托 是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。我们先看一个例子,声明委托的语法为“delegate 返回值类型 委托名(参数列表)”:
<span style="font-family:SimSun;font-size:18px;">public delegate int DelegateHandler(int number1,int number2);</span>
我们再声明一个方法:
<span style="font-family:SimSun;font-size:18px;">public class DelegateDemo
{
public int Add(int number1,int number2)
{
return number1 + number2;
}
}</span>
在DelegateDemo这个类中的Add()方法,其返回值类型和参数类型,参数个数和我们上面声明的委托是一样的,那么,我们就可以用Add()方法对委托的参数进行赋值:
<span style="font-family:SimSun;font-size:18px;">DelegateDemo delegateDemo = new DelegateDemo();
DelegateHandler delegateHandler = delegateDemo.Add;
delegateHandler(1,2);</span>
我们总结一下使用委托的步骤:
1.首先声明一个委托;
2.实例化委托;
3.根据所声明的委托中的返回值类型,参数列表中参数的类型个参数个数,判断某方法是否可以使用委托;
4.如果满足3,则把该方法赋值给委托的实例(注意,只需赋方法名,不要加“()”);
5.像使用该方法一样使用委托。
通过上面的的例子,我简单理解为委托就是把方法当做参数用。有人也许不理解,这么麻烦,我为什么一定要用委托呢?其实,这就是委托的应用领域了: 委托的最终目的是把一个类的某个方法传递到另一个类中去调用而无须传递前一个类的对象。即,一个类的对象可以运行另一个类的对象中的方法,但前者无须持有后者的引用。 在某些情况下,为了运行某个类对象的某个方法,但无论以类变量、超类变量或是接口变量传递这个对象都不合适,此时使用委托最为合理。
使用委托还可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。