Delegate를 메서드 파라미터로 전달
Unity3D/C# 2015. 4. 6. 11:51반응형
http://www.csharpstudy.com/CSharp/CSharp-delegate.aspx
using UnityEngine; using System.Collections; public class FuncTest : MonoBehaviour { void Start () { Run(); } void Run() { int[] a = { 5, 53, 3, 7, 1 }; // 올림차순으로 소트 MySort.CompareDelegate compDelegate = AscendingCompare; MySort.Sort(a, compDelegate); // 내림차순으로 소트 compDelegate = DescendingCompare; MySort.Sort(a, compDelegate); } // CompareDelegate 델리게이트와 동일한 Prototype int AscendingCompare(int i1, int i2) { if (i1 == i2) return 0; return (i2 - i1) > 0 ? 1 : -1; } // CompareDelegate 델리게이트와 동일한 Prototype int DescendingCompare(int i1, int i2) { if (i1 == i2) return 0; return (i1 - i2) > 0 ? 1 : -1; } class MySort { // 델리게이트 CompareDelegate 선언 public delegate int CompareDelegate(int i1, int i2); public static void Sort(int[] arr, CompareDelegate comp) { if (arr.Length < 2) return; Debug.Log("함수 Prototype: " + comp.Method); int ret; for (int i = 0; i < arr.Length - 1; i++) { for (int j = i + 1; j < arr.Length; j++) { ret = comp(arr[i], arr[j]); if (ret == -1) { // 교환 int tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; } } } Display(arr); } static void Display(int[] arr) { foreach (var i in arr) Debug.Log(i + " "); Debug.Log(""); } } }
반응형
'Unity3D > C#' 카테고리의 다른 글
깊은 복사(Deep Copy) VS 얕은 복사(Shallow Copy) (1) | 2015.10.23 |
---|---|
[Design Pattern] Factory Method (0) | 2015.09.02 |
Func<TResult> Delegate (0) | 2015.04.06 |
A Beginner's Tutorial on Implementing IEnumerable Interface and Understanding yield Keyword (0) | 2015.04.03 |
extension method. (0) | 2015.02.25 |