【发布时间】:2012-02-21 20:05:39
【问题描述】:
我不认为我理解委托方法的意义。我见过的所有例子都是这样的:
class DelegateClass
{
private List<string> ListString = new List<string>;
delegate void DoSomethingToStringsDelegate(string s);
public base()
{
ListString.Add("string"); ....
}
void ProcessStrings(DoSomethingToStringsDelegate dstsd)
{
foreach(string s in ListString)
dstsd(s);
}
}
class AClass
{
...
void UseDelegateMethod(...)
{
DelegateClass ds = new DelegateClass();
ds.ProcessStrings(new DoSomethingToStringsDelegate(PrintStrings);
}
void PrintStrings(string s)
{
System.out.Write(s);
}
}
当你可以简单地实现一个 getListStrings() 并自己遍历字符串,做你需要做的事情时,我不明白为什么需要这样做,就好像它是一个委托一样。
foreach( string s in ds.ggetListStrings() )
System.out.Write(s);
私人会员的理由没有意义,因为我可以这样做:
global List<Strings> myListStrings = new List<Strings>();
ds.ProcessStrings(new DoSomethingToStringsDelegate(GetStrings);
void GetStrings(string s)
{
myListStrings.Add(s);
}
...现在我有了相同的列表,就像 getListStrings() 会做的那样...。
谁能解释一下?非常感谢!
【问题讨论】:
-
那个例子看起来……很复杂。我可能不会这样写,尽管我需要知道更大的上下文;-) 但是,委托 (delegate/Action/Func) 的“要点”是它可以在不同的上下文中调用:例如作为回调。相反,请考虑
Regex.Replace(string,string,MatchEvaluator),它显示了一个委托 (MatchEvaluator) 以一种非常有用的方式使用。 (曾经尝试在 Java 中进行类似的正则表达式替换吗?这不好玩。) -
再一次,难道你不能这样做... if(MatchEvaluator) Regex.Replace(string, string)?