2017-04-18 1 views
-3

이것은 내가 여기에서 얻은 프로젝트의 일부 코드의 프로토 타입입니다. 그러나 그것이 작동하는 방식을 이해하는 데 어려움을 겪고 있습니다. 다음은 코드입니다.C# 대리자와 관련된 코드는 어떻게 작동합니까?

static void Main(string[] args) 
    { 
     SomeClass sm = new SomeClass(); 
     var assigner = new Dictionary<string, Action<SomeClass, string>> 
     { 
      ["TargetText"] = (someClass, value) => someClass.Name = value, 
     }; 

     for (int i = 0; i < 10; i++) 
     { 
      Action<SomeClass, string> propertySetter; 
      if (!assigner.TryGetValue("TargetText", out propertySetter)) 
      { 
       continue; 
      } 
      else 
       propertySetter(sm, "Johnny Bravo"); 
     } 
     Console.WriteLine(sm); // output Johnny Bravo ???? 
    } 
} 
public class SomeClass 
{ 
    string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    public override string ToString() 
    { 
     return $"{Name}"; 
    } 
} 

질문 :

  1. propertySetter 대표는 Main()에 할당되지 않은, 그래서 왜 사용할 수 있도록 허용?
  2. 인수가 propertySetter(sm, "Johnny Bravo");에 전달되면 할당 자 사전으로 이동하도록 지시하는 항목은 무엇입니까? 내가 "TargetText" 같은 것을 사람들이있는 propertySetter(sm, "Johnny Bravo");

와 함께 전달되는 참조하지 않는 한이 사전에 도착 않는 경우

  • , 그것을 실행하는 람다 표현을 알고 않는 방법 (제공 여러가 있습니다) 내가 지금 이것에 관해 가지고있는 질문 만, 나는 다른 것을 생각하면이 포스트를 업데이트 할 것이다.

  • +2

    ''TryGetValue' 호출에서'propertySetter'가 할당됩니다. 스레드 당 – msitt

    +2

    개의 질문을하십시오. 문제를 좁히십시오 – Rahul

    +0

    * "할당 자 사전에 가도록 지시하는 내용은 무엇입니까?"* - 당신은 그것을 할당 자로부터 얻었습니다. 'TryGetValue'를 사용하여 사전에서 가져온 λ 식 객체를 실행합니다. –

    답변

    1

    propertySetter 대리자가 Main()에서 할당되지 않았으므로 왜 허용 되었습니까?

    if 문에 out 인수로 전달하므로 값으로 초기화됩니다.

    인수가 propertySetter (sm, "Johnny Bravo")에 전달되면; 할당 자 사전으로 이동하도록 지시하는 것은 무엇입니까?

    당신은 당신이에서 찾고있는 키 TargetText과 관련된 사전 작업 위임이 : 그래서 대리인이 propertySetter에 할당

    assigner.TryGetValue("TargetText", out propertySetter) 
    

    을 그리고 SomeClass의 인스턴스를 가져 오며을 설정 Name 주어진 값에 대한 속성. 그 후에 모든 델리게이트 요구는 당신이 전달할 클래스와 값의 인스턴스입니다 :

    propertySetter(sm, "Johnny Bravo"); 
    
    +0

    이것은 훨씬 더 의미가 있습니다, 감사합니다. – Vocaloidas

    관련 문제