언어 정리/c#

c# - delegate 사용법

rimugiri 2023. 11. 26. 15:00
728x90

delegate는 아래와 같이 형식의 이름, 반환값, 입력 값들을 정해준뒤 형식의 이름을 통해 함수를 인자로 넘겨줄 수 있게 만든다

using System;
using System.Collections.Generic;
using System.Linq;

class MainClass {
    
    //형식 이름 : TestDelegate
    //반환값 int
    //입력 void
    delegate int TestDelegate();
    
    static void TestProgram(TestDelegate test){
        test();
    }
    static int DelegateTest(){
        Console.WriteLine("TestFinished");
        return 0;
    }
    static void Main() {
        TestProgram(DelegateTest);
    }
}

 

추가로 하나의 델리게이트에 여러개의 함수를 등록하여 한번에 함수 여러개가 동작하게 할 수 있다

using System;
using System.Collections.Generic;
using System.Linq;

class MainClass {
    
    //형식 이름 : TestDelegate
    //반환값 int
    //입력 void
    delegate int TestDelegate();
    
    static void TestProgram(TestDelegate test){
        test();
    }
    static int DelegateTest(){
        Console.WriteLine("TestFinished");
        return 0;
    }
    static int DelegateTest2(){
        Console.WriteLine("TestFinished2");
        return 0;
    }
    static void Main() {
        TestDelegate td = new TestDelegate(DelegateTest);
        td += DelegateTest2;
        //td -= DelegateTest2 //등록취소
        TestProgram(td);
    }
}

 

추가로 다른 곳에서 직접적으로 호출을 방지하기 위해 event를 사용할 수 있다

public class Test{
    public delegate int TestDelegate();
    public event TestDelegate TD;
     
    public void Update(){
        TD();
    }
}
 
class MainClass {
    
    static int DelegateTest(){
        Console.WriteLine("TestFinished");
        return 0;
    }
    static int DelegateTest2(){
        Console.WriteLine("TestFinished2");
        return 0;
    }
    static void Main() {
        Test test = new Test();
        test.TD += DelegateTest2;
        test.TD += DelegateTest;
        //실행 불가능 test.TD();
        test.Update();
    }
}

 

728x90

'언어 정리 > c#' 카테고리의 다른 글

c# - lambda 간단한 사용예제  (0) 2023.11.26
C# - delegate 확장 Func, Action  (1) 2023.11.26
c# 코드시간 측정 방법  (0) 2023.02.16
c# - delegate  (0) 2023.01.11
c# 가변 배열  (0) 2022.12.31