想了一下,想出个更容易理解的例子。
例如有一个方法,它的作用是从来源A获取信息然后发布到目标B,但是它不会处理信息。它的工作是这个样子的:
while (还没下班) {
// 获取信息
// 获取信息
// 获取信息
// 获取信息 。。。
// 处理信息——我不知该怎么处理
// 发布信息
// 发布信息
// 发布信息
// 发布信息 。。。
}
它就可以将处理信息那里抽象成一个委托,这个委托的输入是获取回来的信息,输出是经过处理可以发布的信息:
public delegate string/*输出*/ ProcessInfoDelegate(string rawMessage)/*输入*/
这样,方法就可以写成
public void TransferInfo(X source, ProcessInfoDelegate how, Y destination)
{
string msg;
// ...
// 获取信息中
// ...
msg = how(msg); // 委托别人做信息处理工作
// ...
// 发布信息中
// ...
}
那么,如果有一个类需要用这个方便的方法,它就先定义它期待的信息处理方法,例如
class User
{
private string MyProcessor(string input)
{
return input.Substring(2); // 不要最前面两个字符
}
然后调用方法:
public void Do()
{
....
ClassName.TransferInfo(src,
new ProcessInfoDelegate(MyProcessor), // 包装委托变量
dest);
}
}
例如有一个方法,它的作用是从来源A获取信息然后发布到目标B,但是它不会处理信息。它的工作是这个样子的:
while (还没下班) {
// 获取信息
// 获取信息
// 获取信息
// 获取信息 。。。
// 处理信息——我不知该怎么处理
// 发布信息
// 发布信息
// 发布信息
// 发布信息 。。。
}
它就可以将处理信息那里抽象成一个委托,这个委托的输入是获取回来的信息,输出是经过处理可以发布的信息:
public delegate string/*输出*/ ProcessInfoDelegate(string rawMessage)/*输入*/
这样,方法就可以写成
public void TransferInfo(X source, ProcessInfoDelegate how, Y destination)
{
string msg;
// ...
// 获取信息中
// ...
msg = how(msg); // 委托别人做信息处理工作
// ...
// 发布信息中
// ...
}
那么,如果有一个类需要用这个方便的方法,它就先定义它期待的信息处理方法,例如
class User
{
private string MyProcessor(string input)
{
return input.Substring(2); // 不要最前面两个字符
}
然后调用方法:
public void Do()
{
....
ClassName.TransferInfo(src,
new ProcessInfoDelegate(MyProcessor), // 包装委托变量
dest);
}
}
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}