일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- github
- HTML
- c언어
- Data Structure
- c# 윈폼
- Algorithm
- 플러터
- 깃
- 유니티
- gitlab
- dart 언어
- jupyter
- Unity
- c# winform
- vim
- C# delegate
- 포인터
- docker
- 도커
- jupyter lab
- C언어 포인터
- Flutter
- 다트 언어
- c#
- c# 추상 클래스
- git
- Houdini
- Python
- C++
- 구조체
Archives
- Today
- Total
nomad-programmer
[Programming/C#] delegate를 이용한 익명 메소드 (Anonymous Method) 본문
익명 메소드란 이름이 없는 메소드를 말한다. 익명 메소드는 delegate 키워드를 이용하여 선언한다.
대리자 인스턴스 = delegate(매개변수 목록)
{
// 실행하고자 하는 코드
};
익명 메소드는 자신을 참조할 대리자의 형식과 동일한 형식으로 선언되어야 한다.
delegate int Calculate(int a, int b);
public static void Main(){
Calculate calc;
calc = delegate(int a, int b){
return a + b;
};
}
반환 형식을 int로 선언했다면 익명 메소드도 int 형식의 결과를 반환해야 하며, 대리자에서 int 형식의 매개 변수 2개를 받도록 선언했다면 익명 메소드도 역시 동일하게 매개 변수를 받도록 구현해야 한다.
익명 메소드는 아주 유용하게 사용된다. 대리자가 참조할 메소드를 넘겨야 할 시기에 이 메소드가 두 번 다시 사용할 일이 없다고 판단되면 그 때가 익명 메소드를 사용할 타이밍이다.
익명 메소드의 예제
using System;
namespace test
{
delegate int Compare(int a, int b);
internal class Program
{
static void BubbleSort(int[] dataSet, Compare comparer)
{
int temp = 0;
for (int i = 0; i < dataSet.Length - 1; i++)
{
for (int j = 0; j < dataSet.Length - (i + 1); j++)
{
if (comparer(dataSet[j], dataSet[j + 1]) > 0)
{
temp = dataSet[j];
dataSet[j] = dataSet[j + 1];
dataSet[j + 1] = temp;
}
}
}
}
public static void Main(string[] args)
{
int[] array = new int[] {3, 7, 4, 2, 10};
Console.WriteLine("sorting ascending...");
// 익명 메소드 전달
BubbleSort(array, delegate(int a, int b)
{
if (a > b)
return 1;
else if (a == 0)
return 0;
else
return -1;
});
for (int i = 0; i < array.Length; i++)
Console.Write($"{array[i]} ");
int[] array2 = new int[] {7, 2, 8, 10, 11};
Console.WriteLine("\nsorting descending...");
BubbleSort(array2, delegate(int a, int b)
{
if (a < b)
return 1;
else if (a == b)
return 0;
else
return -1;
});
for (int i = 0; i < array2.Length; i++)
Console.Write($"{array2[i]} ");
Console.WriteLine();
}
}
}
/* 결과
sorting ascending...
2 3 4 7 10
sorting descending...
11 10 8 7 2
*/
'Programming > C#' 카테고리의 다른 글
[Programming/C#] Lambda (익명 메소드) (0) | 2020.09.23 |
---|---|
[Programming/C#] 이벤트 (Event) : 객체에 일어난 사건 알리기 (0) | 2020.09.23 |
[Programming/C#] 대리자 체인 (0) | 2020.09.22 |
[Programming/C#] 일반화 대리자 (0) | 2020.09.22 |
[Programming/C#] 대리자 (Delegate) a.k.a (함수 포인터) (0) | 2020.09.22 |
Comments