委托的例子

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ConsoleDelget

{
class set
{
private object[] items;

public set(int numItems)
{
items = new object[numItems];
for (int i = 0; i < numItems; i++)
items[i] = i;
}
public delegate void Feedback(object value, int item, int numitems);

public void ProcessItems(Feedback feedback)
{
for (int item = 0; item < items.Length; item++)
{
if (feedback != null)
feedback(items[item], item + 1, items.Length);
}
}
}

class Program
{
static void Main(string[] args)
{
StaticCallback();
InstanceCallback();
}
static void StaticCallback()
{
set setOfitems = new set(5);
setOfitems.ProcessItems(null);
Console.WriteLine();
//处理items元素并反馈输出到控制台
setOfitems.ProcessItems(new set.Feedback(Program.FeedbackToConsole));
Console.WriteLine();
//处理items元素并反馈输出到控制台
set.Feedback fb = null;
fb += new set.Feedback(Program.FeedbackToConsole);
setOfitems.ProcessItems(fb);
Console.WriteLine();
}
static void InstanceCallback()
{
set setOfitems = new set(5);
setOfitems.ProcessItems(null);
//处理items元素并反馈到文件
Program app = new Program();
setOfitems.ProcessItems(new set.Feedback(app.FeedbackToFile)); 
Console.WriteLine();
}
static void FeedbackToConsole(object value,int item,int numitems)
{
Console.WriteLine("procssing item {0} of {1}:{2}",item,numitems,value);
}
private void FeedbackToFile(object value, int item, int numitems)
{
StreamWriter sw = new StreamWriter("E:\\xm\\test.txt", true);
sw.WriteLine("procssing item {0} of {1}:{2}", item, numitems, value);
sw.Close();
}

}
}

委托是面向对象的,类型安全的,是引用类型(开始就说了委托是个类),所以在使用委托时首先要 定义——>声明——>实例化——>作为参数传递给方法——>使用委托。下面就具体看下如何使用委托的:

一、定义:delegate void Mydelegate(type1 para1,type2 para2);

二、声明: Mydelegate d;

三、实例化:d =new Mydelegate(obj.InstanceMethod);(把一个方法传递给委托的构造器),前面三步就好比构造一个律师对象,方法InstanceMethod好比是当事人

四、作为参数传递给方法:MyMethod(d);(委托实现把方法作为参数传入到另一个方法,委托就是一个包装方法的对象)

五、在方法中使用委托。MyMethod方法好比是法官,MyMethod方法先调用委托,委托在调用方法InstanceMethod,这个过程就如法官向律师问话,然后律师之前肯定向当事人了解了案件的情况。C#委托中好比是律师,真真诉说案情的是当事人(真真被调用的是实例方法InstanceMethod)

MyMethod方法的定义如下:

privatevoid MyMethod(Mydelegate mydelegate)

{
    // 使用委托    mydelegat(arg1,arg2);

}

InstanceMethod方法定义如下:
privatevoid InstanceMethod(type1 para1, type2 para2)
{
    // 定义方法
    console.write("hahha"+para1,para2);
}
posted @ 2013-08-14 17:01  之远  阅读(267)  评论(0编辑  收藏  举报