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 |