2016-10-19 98 views
0

我正在從Web上學習C#,並在參數數組作爲參數和委託並玩弄時提出了一段代碼,這段代碼是死路一條,或者我不知道如何去做。將列表中的方法傳遞給委託?

(我不是要寫什麼也不是的東西,我只是學習,寫什麼:))

是否有可能通過存儲在列表中的委託方法,然後調用?

(PS:PLZ忽視的是,我離開了靜,也不會這樣運行了(或者從來沒有))

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(){...} 
+0

是吧'dels'在'foreach(代表dels)',因爲我看不到一個allDels變量? – Karthik

+0

是的,這很抱歉。 – Erkan

回答

2

而是自己創建委託的 你可以簡單地做它用下面的代碼片段

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<>

0

如果你想使用的方法列表,它是更好地使用操作,但如果你想使用委託,這可以這樣進行:

// 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"); 
} 
+0

@CodeJoy。我已經閱讀了一本關於假人的書,但沒有提到動作或功能。一定會查找它。 – Erkan

+0

@CodeJoy Atleast我現在知道這是可能的,以及如何去做。 – Erkan

+0

'Action' *是代表。他們不是獨立的事物。 – Servy

相關問題