我想我不明白委托(delegate)方法的意义。我见过的所有例子都是这样做的:
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() 并自己遍历字符串,做您需要做的事情,就好像它是一个委托(delegate)一样。
foreach( string s in ds.ggetListStrings() )
System.out.Write(s);
私有(private)成员的理由没有意义,因为我可以这样做:
global List<Strings> myListStrings = new List<Strings>();
ds.ProcessStrings(new DoSomethingToStringsDelegate(GetStrings);
void GetStrings(string s)
{
myListStrings.Add(s);
}
...现在我有了相同的列表,就像 getListStrings() 会做的...
有人可以解释一下吗?非常感谢!
最佳答案
delegate
很有用,因为它实际上充当任何将 string
作为参数并返回 void
的方法的占位符。
如果您熟悉 C,它类似于函数指针的工作方式。取而代之的是,您可以传递与签名和返回类型相匹配的任何方法。
例如,假设我想实现一个对一组对象进行排序的方法。除了对象列表之外,我还可以传递一个指示如何完成排序的委托(delegate)。由于可以传递与委托(delegate)匹配的任何方法,因此我可以在不同方法之间动态切换,例如减少或增加排序:
delegate int comparisonDelegate(int p1, int p2);
void SortArray(int[] array, comparisonDelegate cmp)
{
// determine order according to cmp
}
int CompareDecreasing(int p1, int p2)
{
if(p1 > p2) return -1;
if(p1 < p2) return 1;
return 0;
}
int CompareIncreasing(int p1, int p2)
{
if(p1 > p2) return 1;
if(p1 < p2) return -1;
return 0;
}
现在我可以将 SortArray
调用为:
SortArray(array, new comparisonDelegate(compareDecreasing));
SortArray(array, new comparisonDelegate(compareIncreasing));
关于c# - Noobie Delegate 基础 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384376/