将方法从列表传递给委托
本文关键字:方法 列表 | 更新日期: 2023-09-27 18:13:36
我正在从Web学习c#,而在练习参数数组作为参数和委托和玩耍时,我想出了一段代码,这是一个死胡同,或者我不知道如何。
(我不是想写什么,也不是为了什么,我只是在学习和写作:))
是否有可能将存储在列表中的方法传递给委托然后调用?
(ps:请忽略我漏掉静态的事实,它不会像这样运行(或永远不会))
delegate void one();
delegate void two();
delegate void three();
one Del01 = new one(d1);
two Del02 = new two(d2);
three Del03 = new three(d3);
delegate void newD();
newD getdelegatesfromlist;
void Main(string[] args)
{
List<Delegate> mergedelegates = mergedels(Del01,Del02,Del03);
foreach(Delegate d in mergedelegates)
{
getdelegatesfromlist = new newD(????);
//then maybe invoke the delegate?
getdelegatesfromlist(); //??
}
}
List<Delegate> mergedels(params Delegate[] dels)
{
List<Delegate> dellist = new List<Delegate>();
foreach(Delegate d in Dels)
{
dellist.Add(d);
}
return dellist;
}
void d1(){...}
void d2(){...}
void d3(){...}
而不是自己创建一个委托您可以简单地使用以下代码片段
void Main(string[] args)
{
List<Action> mergedelegates = new List<Action> { d1, d2, d3 };
foreach (Action d in mergedelegates)
{
d.Invoke();
}
}
void d1() {...}
void d2() {...}
void d3() {...}
如果你想要一个带参数的函数,你可以做Action<TYPE1,TYPE2>
如果你想要一个函数返回值,你可以使用Func<>
如果你想使用方法列表,最好使用Actions,但如果你想使用委托,这可以这样做:
// creating the main delegates type
delegate void DelegateVoid ();
// declaring delegates
DelegateVoid Del01 = d1;
DelegateVoid Del02 = d2;
DelegateVoid Del03 = d3;
void Main(string[] args)
{
// looping and invoking delegates
foreach (DelegateVoid d in mergedels (Del01, Del02, Del03)) {
d.Invoke ();
}
}
List<DelegateVoid> mergedels (params DelegateVoid[] dels)
{
List<DelegateVoid> dellist = new List<DelegateVoid> ();
foreach (DelegateVoid d in dels) {
dellist.Add (d);
}
return dellist;
}
static void d1 ()
{
Debug.WriteLine ("Hello 1");
}
static void d2 ()
{
Debug.WriteLine ("Hello 2");
}
static void d3 ()
{
Debug.WriteLine ("Hello 3");
}