Pages Menu
TwitterRssFacebook
Categories Menu

Posted by on Ago 2, 2019

유니티 delegate 예제

많은 사람들이 대리자를 감싸는 것이 어렵고 때로는 일반 함수 호출보다 선호되는 이유를 발견합니다. 초기 학습 곡선이 있지만 통과되면 쉽게 이해할 수 있습니다. 대리자를 사용하여 확장 메서드 라이브러리를 만드는 경우 새 개발자가 코드를 즉시 이해하기 어려울 수도 있습니다(확장 메서드에 대한 좋은 이름은 여기에서 실제로 중요합니다). 당신은 항상 학습 곡선 문제를 제거하기 위해이 블로그 게시물을 가리 킬 수 있습니다 😊 그러나, 쓰레기의 의도하지 않은 생성은 문제의 악화 잠재적으로 상처의 세계를 만들 수 있습니다 … C#의 대리자는 C 또는 C++의 함수 포인터와 유사합니다. 대리자를 사용하면 프로그래머가 대리자 개체 내의 메서드에 대한 참조를 캡슐화할 수 있습니다. 그런 다음 대리자 개체를 참조된 메서드를 호출할 컴파일 타임에 알 필요 없이 참조된 메서드를 호출할 수 있는 코드로 전달할 수 있습니다. — akadia.com 및 통일성을 실행, 당신은 지금 ChangePosition및 ChangeColor가 호출되지 않습니다 통지합니다,만 ChangeRotation 코드가 실행됩니다, 이것은, 할당 연산자가 기존 호출 목록을 재설정하기 때문에, 이 상황은 여러 경우 추적하는 것이 매우 어렵습니다 클래스는 이러한 상황을 피하기 위해 동일한 대리자를 구독하므로 이벤트를 사용합니다. 이제 한 가지 더 실용적인 예를 살펴보겠습니다.

이렇게 하면 이벤트가 하나의 이벤트 호출로 여러 이벤트 리스너를 처리하는 방법에 대해 더 명확하게 알 수 있습니다. “대리자”가 단순히 “콜백 목록”이라고 불리는 경우 모든 것이 처음부터 명확해질 것입니다. 이러한 방식으로 대리자 및 확장 메서드를 사용하면 코드를 재사용 가능하고 읽기 쉽고 간결하게 사용할 수 있는 몇 가지 이점이 있습니다. 의도하지 않은 쓰레기를 만들지 않도록 하는 방법을 염두에 두십시오. 당신이 아래의 의견에 어떻게 생각하는지 알려 당신이 단지 흥미로운 읽은 것을 발견하면 그 👏 버튼을 누르십시오. 방금 읽은 내용에 대한 질문이나 의견이 있으면 트위터에서 저를 공격할 수도 있습니다. 이 상황은 여러 클래스가 동일한 대리자를 구독하는지 추적하기가 매우 어렵습니다. 잭슨은 분기 비용에 대해 더 이야기하고있다. 대리자를 사용하는 메서드에 메서드를 직접 전달하는 경우와 대리자를 변수에 캐시하고 대신 해당 변수를 전달하는 경우 간에 차이가 있습니다. 전자에서는 C # 컴파일러의 자체 캐시에 대한 검사가 있을 것이고 우리는 항상 캐시 검사를 수행합니다 (Jackson에 따르면 성능이 저하 될 수 있음)에서 컴파일러는 여전히 캐시 필드를 유지하여 중복 된 캐시 필드가 있음을 의미합니다 . 및 컴파일러의). 나는 이들 사이의 성능 차이는 일반적으로 걱정하기에 너무 작다는 것을 주장 할 것이다.

내 컴퓨터에서 이것을 벤치마킹 할 때 실행 시간에 큰 차이를 볼 수 없었습니다. 그래서 나는 개인적으로 실제로 진짜 문제가 될 때까지 대부분의 경우 내 대리자를 캐시하지 않습니다. 즉, 대리자 선언은 메서드 시그니처(메서드의 반환 형식 및 인수 형식)를 설명하는 반면 해당 대리자의 인스턴스는 해당 시그니처와 일치하는 메서드를 할당, 참조 및 호출할 수 있습니다. 당신은 아마 전에 액션, Func 및 EventHandler를 발생, 그들은 대리자의 모든 예입니다. Array.Find 또는 List.ForEach와 같은 함수를 사용한 적이 있는 경우 대리자도 사용했습니다. 다음은 int를 매개 변수로 사용 하 고 bool을 반환 하는 대리자의 예입니다. 나는 보통 아이템 컬렉션을 반복하는 내 게임에서 자신을 발견하고 행동을 수행하거나 조건에 따라 상태를 변경합니다.

Centro per un Futuro Sostenibile via Tacito, 84 00193 Roma tel. +39 06 90288228