之前囫囵吞枣的看了一遍c#的入门书,还是有很多不懂的地方,比如这个delegate委托,书里面就完全没有提到过。查中文资料又翻译的让人看不懂,还不如直接看英文了。这边我试着翻译一下,翻的不好请指出
原文来自 [code project](http://www.codeproject.com/Articles/11657/Understanding-Delegates-in-C)
Arul Nayagam C
委托是c#.net里面很玄的一个东西,这篇文章里面我试着解释一下委托是啥,还有多重委托是啥,以及在c#里面的简单应用。
委托是一种类型,不过它指向的不是数字啊,字符串啊之类的,它指向的对象的方法的引用(我好晕),而且他还是可以保证这种引用不会出现类型错误。(这是不是也算静态检查的一种?)
public delegate type_of_delegate delegate_name()
举个栗子:
public delegate int mydelegate(int delvar1,int delvar2)
注意:
例程:
public delegate double Delegate_Prod(int a,int b);
class Class1
{
static double fn_Prodvalues(int val1,int val2)
{
return val1*val2;
}
static void Main(string[] args)
{
//Creating the Delegate Instance
Delegate_Prod delObj = new Delegate_Prod(fn_Prodvalues);
Console.Write("Please Enter Values");
int v1 = Int32.Parse(Console.ReadLine());
int v2 = Int32.Parse(Console.ReadLine());
//use a delegate for processing
double res = delObj(v1,v2);
Console.WriteLine ("Result :"+res);
Console.ReadLine();
}
}
解释一下:
我们这个程序主要是讲解一下委托怎么用
Delegate_Prod这个委托具有double类型,接受的参数也是两个double类型
而在类里面,fn_Prodvalues这个方法也是返回double,接受两个double参数,看到了吧,一样的吧?
在main方法里面,我们给Delegate_Prod建立了一个实例,然后把fn_Prodvalues这个方法的名称交给Delegate的实例了
Delegate_Prod delObj = new Delegate_Prod(fn_Prodvalues);
接下来,我们就不会让fn_Prodvalues直接与外界接触啦,如果要接触,参数要经过delegate传输,就像这样:
delObj(v1,v2);
然后方法返回的结果也是经由delobj这个委托的实例传输回来。
什么是多重委托呢?其实就是一个委托同时接了几个活,引用了一个以上的方法。
鉴于它这么猛,没有方法会认真对待他,所以不会有结果传回:多重委托的引用对象还有它自己都必须是void类型的
再举一个简单的例子:
delegate void Delegate_Multicast(int x, int y);
Class Class2
{
static void Method1(int x, int y)
{
Console.WriteLine("You r in Method 1");
}
static void Method2(int x, int y)
{
Console.WriteLine("You r in Method 2");
}
public static void <place w:st="on" />Main</place />()
{
Delegate_Multicast func = new Delegate_Multicast(Method1);
func += new Delegate_Multicast(Method2);
func(1,2); // Method1 and Method2 are called
func -= new Delegate_Multicast(Method1);
func(2,3); // Only Method2 is called
}
}
解释:
上面的程序里面,两个方法,method1和method2都是接受两个int参数,void无返回。
然后main方法里面,这个多重委托就这么声明好了,顺便还送了一个方法进去:
Delegate_Multicast func = new Delegate_Multicast(Method1);
然后我们又用+=再送了一个方法给他
后面我们又用-=从他那里拿走了一个方法
这篇文章简单的讲解了一下委托的概念,举了几个简单的小程序作为例子。如果你对于这篇文章有什么问题,联系原作者in english,arul_tony@yahoo.com.
原文:http://www.cnblogs.com/SiumingLearning/p/delegate_in_c_sharp.html