일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Flutter
- HTML
- 플러터
- 도커
- c# 추상 클래스
- gitlab
- Data Structure
- 유니티
- vim
- Algorithm
- 다트 언어
- 구조체
- c# 윈폼
- Unity
- C언어 포인터
- dart 언어
- c#
- C++
- Python
- C# delegate
- c언어
- 깃
- docker
- Houdini
- jupyter lab
- jupyter
- 포인터
- github
- c# winform
- git
Archives
- Today
- Total
nomad-programmer
[Programming/C#] 일반화 대리자 본문
대리자는 보통의 메소드뿐 아니라 일반화 메소드도 참조할 수 있다. 물론 이 경우에는 대리자도 일반화 메소드를 참조할 수 있도록 형식 매개 변수를 이용하여 선언되어야 한다. 형식 매개 변수를 이용해서 대리자를 선언하는 요령은 메소드와 같다. 괄호 <> 사이에 형식 매개 변수를 넣어주면 된다.
일반화 대리자 예제
using System;
namespace test
{
delegate int Compare<T>(T a, T b);
internal class Program
{
static int AscendCompare<T>(T a, T b) where T: IComparable<T>
{
return a.CompareTo(b);
}
static int DescendCompare<T>(T a, T b) where T : IComparable<T>
{
return b.CompareTo(a);
}
static void BubbleSort<T>(T[] array, Compare<T> comparer)
{
T temp;
for (int i = 0; i < array.Length - 1; i++)
{
for (int j = 0; j < (array.Length - (i + 1)); j++)
{
if (comparer(array[j], array[j+1]) > 0)
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
public static void Main(string[] args)
{
int[] array = new int[] {5, 3, 7, 1, 2};
BubbleSort<int>(array, new Compare<int>(AscendCompare));
for (int i = 0; i < array.Length; i++)
{
Console.Write($"{array[i]} ");
}
Console.WriteLine();
string[] array2 = {"abc", "def", "ghi", "jkl", "mno"};
BubbleSort<string>(array2, new Compare<string>(DescendCompare));
for (int i = 0; i < array2.Length; i++)
{
Console.Write($"{array2[i]} ");
}
Console.WriteLine();
}
}
}
/* 결과
1 2 3 5 7
mno jkl ghi def abc
*/
System.Int32(int), System,Double(double)을 비롯한 모든 수치 형식과 System.String(string)은 모두 IComparable을 상속하여 CompareTo() 메소드를 구현하고 있다.
'Programming > C#' 카테고리의 다른 글
[Programming/C#] delegate를 이용한 익명 메소드 (Anonymous Method) (0) | 2020.09.22 |
---|---|
[Programming/C#] 대리자 체인 (0) | 2020.09.22 |
[Programming/C#] 대리자 (Delegate) a.k.a (함수 포인터) (0) | 2020.09.22 |
[Programming/C#] 예외 처리 (0) | 2020.09.21 |
[Programming/C#] 일반화 클래스 : IEnumerable<T>, IEnumerator<T> (0) | 2020.09.20 |
Comments