스토리지

[3.22] delegate 연습 본문

Unity/수업내용(C#)

[3.22] delegate 연습

ljw4104 2021. 3. 22. 12:04

연습 1. button click 이벤트

더보기
using System;

namespace Study09
{
    public delegate void DelOnClick();
    public class Button
    {
        public DelOnClick onClick;
        public Button()
        {

        }

        public void Click()
        {
            Console.WriteLine("[Button] 클릭했다.");
            onClick();
        }
    }
}
using System;

namespace Study09
{
    public class App
    {
        public App()
        {
            Button btn = new Button();
            btn.onClick = this.OnClickButton;

            btn.Click();
        }

        public void OnClickButton()
        {
            //설정 팝업을 연다
            Console.WriteLine("[App] 설정 팝업을 연다.");
        }
    }
}

 

연습 2. 빌딩 건설 완료처리

더보기
using System;

namespace Study09
{
    public class App
    {
        public App()
        {
            Building building = new Building();
            building.onComplete = OnComplete;

            building.Build();
        }

        private void OnComplete()
        {
            Console.WriteLine("[App] 건설 완료.");
        }
    }
}
using System;

namespace Study09
{
    public delegate void DelOnComplete();
    public class Building
    {
        public DelOnComplete onComplete;
        public Building()
        {

        }

        public void Build()
        {
            Console.WriteLine("[Building] 빌딩 건설 시작.");
            onComplete();
        }
    }
}

 

연습 3. 파일 매니저

더보기
using System;

namespace Study09
{
    public class App
    {
        public App()
        {
            FileManager fm = new FileManager();
            fm.onOpenComplete = this.OnOpenComplete;

            fm.Open("C:\\test.txt");
        }

        private void OnOpenComplete()
        {
            Console.WriteLine("파일 열기 완료.");
        }
    }
}
using System;

namespace Study09
{
    public delegate void DelOnOpenComplete();
    public class FileManager
    {
        public DelOnOpenComplete onOpenComplete;
        public FileManager()
        {

        }

        public void Open(string path)
        {
            Console.WriteLine("{0} 위치의 파일을 열었습니다.", path);
            onOpenComplete();
        }
    }
}

 

연습 4. SceneManager에 의한 씬 호출

더보기
using System;

namespace Study09
{
    public class App
    {
        //생성자 
        public App()
        {
            Console.WriteLine("App");
            SceneManager sm = new SceneManager();
            //델리게이트 인스턴스화 
            sm.onLoaded = this.OnLoaded;
            //메서드 호출 
            sm.LoadScene("Lobby");

        }

        //델리게이트 메서드 정의 
        private void OnLoaded()
        {
            Console.WriteLine("로비 호출됨.");
        }
    }
}
using System;

namespace Study09
{
    public delegate void DelOnLoaded();
    public class SceneManager
    {
        public DelOnLoaded onLoaded;
        public SceneManager()
        {

        }

        public void LoadScene(string sceneName)
        {
            Console.WriteLine("{0}씬 호출함", sceneName);
            onLoaded();
        }
    }
}

 

 

연습 5. GameLauncher 

더보기
using System;

namespace Study09
{
    public class App
    {
        //생성자 
        public App()
        {
            Console.WriteLine("App");
            GameLauncher launcher = new GameLauncher();
            launcher.onEndGame = this.OnEndGame;
            launcher.StartGame();
        }
        private void OnEndGame()
        {
            Console.WriteLine("게임 끝.");
        }
    }
}
using System;

namespace Study09
{
    public delegate void DelOnEndGame();
    public class GameLauncher
    {
        public DelOnEndGame onEndGame;
        public GameLauncher()
        {

        }

        public void StartGame()
        {
            Console.WriteLine("게임 시작.");
            onEndGame();
        }
    }
}

 

'Unity > 수업내용(C#)' 카테고리의 다른 글

[3.22] Action 대리자  (0) 2021.03.22
[3.22] 매개변수가 있는 delegate  (0) 2021.03.22
[3.22] delegate 대리자  (0) 2021.03.22
[3.19] Partial 클래스 (분할 클래스)  (0) 2021.03.19
[3.19] 2048 게임 (1차원)  (0) 2021.03.19
Comments