반응형
델리게이트란?
델리게이트는 메서드를 참조하는 형식(Type)이기때문에 객체를 만들어 사용한다.
델리게이트를 호출하면 델리게이트가 참조하고있는 메서드를 호출하게된다.
한정자 delegate 반환형식 델리게이트명(파라미터);
델리게이트에 메서드를 참조시키기위해선 참조시키려는 메서드와 델리게이트의 형식이 같아야한다.
private delegate bool judgement(int x);
public bool Two(int value)
{
return value % 2 == 0;
}
/*
실행 :
judgement judge = Two;
if(judge(2)) Console.WriteLine("짝수입니다.");
*/
델리게이트는 메서드에서 값이 아닌 코드 즉, 메서드를 넘기고 싶을때 사용한다.
아래의 예제처럼 델리게이트를 사용하면 메서드를 오버라이딩하지 않아도 여러 조건을 판단할 수 있다.
public delegate bool judgement(int x);
public bool Two(int value)
{
return value % 2 == 0;
}
public bool Three(int value)
{
return value % 3 == 0;
}
public void OddOrEven(int value, judgement judge)
{
if (judge(value)) Console.WriteLine("짝수입니다.");
else Console.WriteLine("홀수입니다.");
}
/*
실행 :
OddOrEven(10, Two);
OddOrEven(10, Three);
결과 :
짝수입니다.
홀수입니다.
*/
델리게이트 체인
하나의 델리게이트는 여러 메서드들을 동시에 참조할 수 있다.
public delegate void Print(string Message);
public void print1(string message)
{
Console.WriteLine("print1 Message : " + message);
}
public void print2(string message)
{
Console.WriteLine("print2 Message : " + message);
}
public void print3(string message)
{
Console.WriteLine("print3 Message : " + message);
}
/*
실행 :
Print printer_1 = print1;
printer_1 += print2;
printer_1 += print3;
printer_1("Print Delegate 1");
Print printer_2 = (Print)Delegate.Combine(
new Print(print1),
new Print(print2),
new Print(print3)
);
결과 :
print1 Message : Print Delegate 1
print2 Message : Print Delegate 1
print3 Message : Print Delegate 1
print1 Message : Print Delegate 2
print2 Message : Print Delegate 2
print3 Message : Print Delegate 2
*/
익명 메서드
메서드는 한정자, 반환값, 파라미터가 없어도 되지만 메서드명은 반드시 있어야한다.
하지만 델리게이트를 사용하면 이름이없는 메서드를 만들 수 있다.
public delegate int Clac(int x, int y);
Clac Plus = delegate (int x, int y) { return x + y; };
Clac Minus = delegate (int x, int y) { return x - y; };
/*
실행 :
Console.WriteLine(Plus(10, 20));
Console.WriteLine(Minus(10, 20));
결과 :
30
-10
*/
반응형
'프로그래밍 > .NET' 카테고리의 다른 글
.net core 설치 in terminal (0) | 2021.02.25 |
---|---|
람다 (Lambda) (0) | 2020.12.11 |
메서드 (Method) (0) | 2020.12.10 |
Startup Class (0) | 2020.11.29 |
프로젝트에 관리자 권한 부여하기 (0) | 2020.07.24 |