一直以来对于刚接触c#的朋友来说(包括我),委托是很麻烦的东西,那究竟什么是委托,而又要怎么去使用呢!
我们习惯于把数据作为参数传递给方法,但是我们可不可以给方法传送另一个方法呢,比喻某个方法的执行的操作并不是针对数据进行的。而是对另一个方法进行操作。听起来有点奇怪。答案是肯定的,这就是我们所说的委托。
还是用例子来说吧
class DelegateTest
{
public delegate void OutPutDelegate(string name);//申明一个委托
public static void OutPutText(string name)//定义与委托相关联的方法
{
Console.WriteLine(name + "\n");
}
static void Main()
{
//创建一个委托数组
OutPutDelegate[] hander ={ new OutPutDelegate(DelegateTest.OutPutText), new OutPutDelegate(DelegateTest.OutPutText) };
Console.WriteLine("开始调用委托");
for (int i = 0; i < hander.Length; i++)
{
hander[i]("调用委托"+i);//调用委托
}
Console.ReadLine();
}
}
注意:实际上定义一个委托是指"定义一个新类",派生于基类System.MulticastDelegate的类,而System.MulticastDelegate又派生于System.Delegate.
委托调用匿名方法
class DelegateTest
{
public delegate void OutPutDelegate(string name);
static void Main()
{
OutPutDelegate hander = delegate(string para)//匿名方法的申明
{
Console.WriteLine(para);
};
hander("cnblogs");
Console.ReadLine();
}
}
我们习惯于把数据作为参数传递给方法,但是我们可不可以给方法传送另一个方法呢,比喻某个方法的执行的操作并不是针对数据进行的。而是对另一个方法进行操作。听起来有点奇怪。答案是肯定的,这就是我们所说的委托。
还是用例子来说吧
class DelegateTest
{
public delegate void OutPutDelegate(string name);//申明一个委托
public static void OutPutText(string name)//定义与委托相关联的方法
{
Console.WriteLine(name + "\n");
}
static void Main()
{
//创建一个委托数组
OutPutDelegate[] hander ={ new OutPutDelegate(DelegateTest.OutPutText), new OutPutDelegate(DelegateTest.OutPutText) };
Console.WriteLine("开始调用委托");
for (int i = 0; i < hander.Length; i++)
{
hander[i]("调用委托"+i);//调用委托
}
Console.ReadLine();
}
}
注意:实际上定义一个委托是指"定义一个新类",派生于基类System.MulticastDelegate的类,而System.MulticastDelegate又派生于System.Delegate.
委托调用匿名方法
class DelegateTest
{
public delegate void OutPutDelegate(string name);
static void Main()
{
OutPutDelegate hander = delegate(string para)//匿名方法的申明
{
Console.WriteLine(para);
};
hander("cnblogs");
Console.ReadLine();
}
}
本文只是简单的谈了一下c#中的委托,写的不好还请大家多多指教,若需了解详细点击 http://msdn2.microsoft.com/zh-cn/library/0yw3tz5k(VS.80).aspx
转载请注明:http://www.liebo6.com 裂帛服饰