제네릭
본문 로딩 중...
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
클래스나 메서드가 다룰 형식을 정하지 않고, 쓰는 쪽에서 정하게 하는 문법입니다.
.
문법형식 :
public class <클래스 이름>
{
// T를 형식처럼 씁니다
}
메서드 이름 뒤에 형식 매개변수를 붙여 그 메서드 안에서만 형식을 열어 두는 것입니다.
문법 형식 :
<접근 제한자> <반환형> <메서드 이름> (<매개변수>)
public static void PrinArray<T>(T[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
}
형식 매개변수 에 들어올 수 있는 형식의 범위를 좁혀, 그 범위에 있는 멤버를 쓸 수 있게 하는 문법입니다.
문법형식 : public class <클래스 이름> where T : <제약>
MonsterBox<Slime> box = new MonsterBox<Slime>();
MonsterBox<int> wrong = new MonsterBox<int>();
public class MonsterBox<T> where T : Monster
{
private T[] items = new T[10];
private int count = 0;
public void Add(T item)
{
items[count] = item;
count++;
}
public void PrintAll()
{
for (int i = 0; i < count; i++)
{
items[i].Attack(); // Monster의 멤버라 쓸 수 있다.
}
}
}
| 제약 | 뜻 |
|---|---|
where T : <클래스 이름> | 그 클래스이거나 그것을 상속한 것만 |
where T : <인터페이스 이름> | 그 인터페이스를 구현한 것만 |
where T : class | 참조 형식만 |
where T : struct | 값 형식만 |
where T : new() | 매개변수 없는 생성자가 있는 것만 |