순서
I. Generic
II. 예제
I. Generic
C#의 Generic Programming은 타입의 일반화라고 생각하면 된다.
(C++의 Template과는 좀 차이가 있다.) 아래 링크 참고
Generic 특징
1. 컴파일 시 형식검사X 런타임시 확인O
2. Method Overloading의 불편함을 해결하기 위해 등장
3. Linked List, HashTable, Stack 등에 사용함
List<T> Queue<T> Stack<T> Dictionary<K, V>
4. where T : struct , class, new(), ICmparable 등 어디서 파생되었는지 설정 가능
II. 예제
1. Generic Class를 정의하여 사용하는 예제
using System
namespace GenericApp {
// Generic Class 정의
class CSum<T> {
public T sum(T i, T j) {
// dynamic으로 casting하여 동적으로 형 변환 필수
return (dynamic)i + (dynamic)j;
}
}
class CMain {
public static void Main() {
// 정의된 클래스 생성방법
CSum<int> Sum1 = new CSum<int>() {
Console.WriteLine($"{Sum1.sum(1,3)}");
}
}
}
}
2. Generic Method를 사용하는 예제(Array)
using System
namespace GenericApp {
class CArray {
public T[] getArray<T>(int size, T val) {
T[] array = new T[size];
for (int i=0; i<size; i++) {
array[i] = val;
}
return array;
}
}
class CMain {
public static void Main() {
CArray<string> arr1 = new CArray();
Console.WriteLint($"{arr1.getArray<string>(3,"hello").Length}");
}
}
}
3. Generic Class를 사용하는 예제(Stack)
주로 어떤 형식이 들어올지 모르는 Stack, Queue등에서 자주 사용한다.
using System;
namespace GenericApp4 {
class CStack<T> {
private T[] _stack = new T[10];
int curidx = 0;
public void push (T data) {
_stack[curidx] = data;
curidx++;
}
public T pop() {
if (curidx == 0) {
return default(T); // generic에서 null반환
} else {
curidx--;
return _stack[curidx] = data;
}
}
// Main은 똑같이 구현..
}
}
'Programming > C#' 카테고리의 다른 글
[Programming][C#] 문법 5. Struct (0) | 2023.01.09 |
---|---|
[Programming][C#] 문법 4. Polymorphism with Inheritance & Override (0) | 2023.01.08 |
[Programming][C#] 문법 3. Property (0) | 2023.01.08 |
[Programming][C#] 문법 1. 매개변수 (0) | 2023.01.08 |