일반화 메서드
- 데이터 형식을 일반화한 메서드
void CopyArray<T>( T[] source, T[] target )
{
for( int i = 0; i < source.Length; ++ )
target[i] = source[i];
}
일반화 클래스
- 데이터 형식을 일반화한 클래스
class Array_Generic<T>
{
private T[] array;
//...
public T GetElement( int index ) => array[index];
}
형식 매개변수 제약시키기
- where 절을 통해 형식 매개변수를 제한할 수 있다.
class MyList<T> where T : MyClass // T는 MyClass를 상속하여야한다.
{
//
}
제약 | 설명 |
where T : struct | T는 값 형식이어야 함. |
where T : class | T는 참조 형식이어야 함. |
where T : new() | T는 반드시 매개 변수가없는 생성자가 있어야 함. |
where T : 기반_클래스_이름 | T는 명시한 기반 클래스의 파생 클래스여야 함. |
where T : 인터페이스_이름 | T는 명시한 인터페이스를 반드시 구현해야함. (다중 가능) |
where T : U | T는 또 다른 형식 매개변수 U로부터 상속받은 클래스여야 함. |
class BaseArray<U> where U : Base
{
public U[] Array{get;set;}
public BaseArray(int size)
{
Array = new U[size];
}
public void CopyArray<T>(T[] Source) where T : U
{
Source.CopyTo(Array, 0);
}
}
일반화 컬렉션
- List <T>, Queue <T>, Stack <T>, Dictionary <TKey, TValue>는 각각 ArrayList, Queue, Stack, Hashtable의 일반화 버전.
Foreach를 사용할 수 있는 일반화 클래스
- 기존 IEnumerable과 IEnumerator 인터페이스에 추가로 한 개씩을 더 구현해야 함.
IEnumerable <T> 인터페이스
메소드 | 설명 |
IEnumerator GetEnumerator() | IEnumerator 형식의 객체를 반환. |
Ienumerator<T> GetEnumerator() | IEnumerator<T> 형식의 객체를 반환. |
IEnumerator <T> 인터페이스
메소드 또는 프로퍼티 | 설명 |
bool MoveNext() | 다음 요소로 이동. 컬렉션의 끝을 지난 경우 false를 반환 |
void Reset() | 컬렉션의 첫번째 위치의 1개 전으로 이동. 첫 번째가 0이면 -1로 이동함. 따라서 MoveNext()를 호출해야 첫 번째가 됨. |
Object Current{ get; } | 컬렉션의 현재 요소를 반환 |
T Current{ get; } | 컬렉션의 현재 요소를 반환 |
'🌍 C# Study > C# 기초' 카테고리의 다른 글
C# 복습하기 12) 대리자와 이벤트 (0) | 2021.04.12 |
---|---|
C# 복습하기 11) 예외 처리 (0) | 2021.04.12 |
C# 복습하기 9) 배열, 컬렉션, 인덱서 (0) | 2021.04.11 |
C# 복습하기 8) 프로퍼티 (0) | 2021.04.10 |
C# 복습하기 7) 인터페이스와 추상 클래스 (0) | 2021.04.10 |