상세 컨텐츠

본문 제목

[C# and Unity] Ation & Func 그리고 event

유니티

by simstealer 2023. 5. 5. 15:39

본문

Ation, Func 둘다 delegate의 기반으로 만들어진 기능입니다.

 

C#이 버전 업이 되면서 기능이 확장된 개념입니다.

 

// Action
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System; // Action, Func을 사용하기 위해 필요합니다.

public class ActionTest : MonoBehaviour
{
    private Action testAction;
    /*
    Action은 매개변수를 받을 수도 있습니다.
    private Action<int, float, string ...> testAction;
    이런 경우 매개변수와 동일한 함수만 등록할 수 있습니다.
    */

    private void Start()
    {
        testAction += A; // 함수 등록
        testAction += B; // 함수 등록
        testAction += C; // 함수 등록
        
        testAction -= A; // 함수 등록 해제

        testAction();
    }

    void A() { }
    void B() { }
    void C() { }
}
// Func
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System; // Action, Func를 사용하기 위해 필요합니다.

public class ActionTest : MonoBehaviour
{
    Func<bool> testFunc;
	/*
    Func는 반환값이 존재하는 대리자입니다.
    Func<int, string, bool> testFunc;
    매개변수가 여러개인 경우에는 맨 뒤에 있는 타입이 반환값이 됩니다.
    */
    private void Start()
    {
        testFunc += TrueFunction;
        testFunc += FalseFunction;

        if (testFunc())
        {
            Debug.Log("Func True");
        }
    }
    
    bool TrueFunction()
    {
        return true;
    }
    bool FalseFunction()
    {
        return false;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class eventTest : MonoBehaviour
{
    private event Action eventTest;
	/*
    event는 Action Func 대리자 앞에 붙게됩니다.
    대리자는 내부 클래스에서 호출하기 보단 다른 클래스에서 사용하는 것의 편리함이 있습니다.
    event가 앞에 붙게 되면 대리자 변수를 선언한 클래스에서만 대리자 호출이 가능합니다.
    
    대리자의 함수들을 호출할 때 클래스명.대리자명.Invoke(); 이와 같이 사용하게 됩니다.
    
    다른 클래스에서 호출을 할 경우에도 클래스명.대리자명.Invoke(); 이와 같이 호출을 하는데 
    
    함수 등록과 해제는 가능하지만 event가 앞에 붙으면 다른 클래스에서는 호출할 경우 에러가 납니다.
    
    ActionTest actionTest = new ActionTest();
    actionTest.actionTest += Dead;
    actionTest.actionTest.Invoke(); // <-- 에러
    */
    
}

 

'유니티' 카테고리의 다른 글

[C#] 제네릭  (0) 2024.04.16
[Unity] 오브젝트 풀링  (0) 2023.05.07
[C#] 중첩 클래스  (0) 2023.04.16
[C#] Class 상속 방지하기(sealed)  (0) 2023.04.15
[C#] base  (0) 2023.04.15

관련글 더보기

댓글 영역