2016-10-19 6 views
0

저는 웹에서 C#을 공부 중입니다. 매개 변수 배열을 인수로 사용하고 대리자로 사용하고 놀면서 막 다른 부분 인 코드 조각을 만들었거나 어떻게해야할지 모르겠습니다.목록에서 대리인에게 방법 전달?

가 대리인으로 목록에 저장하는 방법을 통과 한 후 호출 할 수 있나요 (I 아무것도 쓰기를 시도하고 있지 않다 않으며 뭔가, 나는 단지 어떤 :) 공부하고 작성했다)?

(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'에서 'foreD (델리게이트에서 델리게이트)'????, 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