델리게이트 

여러 함수가 중복적으로 사용될 때 델리케이트를 이용하여 함수를 등록하면 손 쉽게 함수를 관리 할 수 있는 기능이다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    public delegate void DeleFunc(int value);
    DeleFunc deleFunc;

    int hp;
    int mp;

    public void setHp(int value)
    {
        hp += value;
    }

    public void setMp(int value)
    {
        mp += value;
    }

    void Start()
    {
        deleFunc += setHp;
        deleFunc += setMp;

        deleFunc(5);

        print(hp);
        print(mp);
    }
}

출력 결과

5

5

 

델리케이트에 함수를 등록할 때는 += 연산자를 이용한다. 반대로 뺄 때는 -= 연산자를 이용하면 된다.

 

이벤트

이벤트는 서로 다른 클래스에서 함수를 추가 시켜고 한번에 호출 할 수 있다. 이벤트를 테스트 하기 위해서 Test 코드를 약간 수정하고 Test2 코드를 새로 만들어서 테스트 하면 아래와 같다.

 

Test.cs 파일

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    public delegate void DeleFunc(int value);
    public static event DeleFunc OnStart;

    public int hp;
    public int mp;

    public void setHp(int value)
    {
        hp += value * 10;
        print("체력: " + hp);
    }

    public void setMp(int value)
    {
        mp += value * 2;
        print("마나: " + mp);
    }

    void Start()
    {
        OnStart += setHp;
        OnStart += setMp;

        OnStart(5);
    }
}

 

Test2.cs 파일

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test2 : MonoBehaviour
{
    void Start()
    {
        Test.OnStart += LevelUp;
    }

    public void LevelUp(int value)
    {
        print(value + "레벨이 되었습니다.");
    }
}

 

출력 결과:

 

'프로그래밍 언어 > C#' 카테고리의 다른 글

C# 프로퍼티  (0) 2019.12.05
C# 상속  (0) 2019.12.05
C# 구조체와 클래스 차이점  (0) 2019.12.04
C# 얕은 복사와 깊은 복사  (0) 2019.12.04
C# Queue와 Stack 사용방법 및 차이점  (1) 2019.12.04
Posted by 소블리애
,