일반화 : 데이터 타입에서 연광성있는 2가지 이상의 개체 집합을 묶어내는 것.
일반화 구조
한정자 반환형식 일반화이름<T> (T 매개변수)
{
코드 1;
코드 2;
코드 3;
...
return 반환값
}
T
를 이용해서 서로 다른 데이터 형식의 메서드를 일반화 할 수 있음.
private void general<T>(T value) // 일반화 함수 생성
{
Console.WriteLine(value); // 일반화 T value를 print힘.
}
private void Form1_Load(object sender, EventArgs e)
{
int[] one = {1, 2, 3};
string two = "일반화";
double three = 45.6;
bool four = true;
foreach(int num in one) general<int>)(num);
general<string>(two);
general<double>(three);
general<object>(four);
}
// 출력값 : 1/2/3/3/일반화/45.6/True
T
를 이용하여 서로 다른 데이터형식의 클래스
를 일반화할 수 있음.
class general_class<T> // 제너럴 클래스 선언
{
public T[] array; // 제너럴 타입 배열
public int size;
public general_class(int size)
{
array = new T[size]; // 제너럴 타입의 새로운 배열 생성
}
}
private void Form1_Load(object sender, EventArgs e)
{
general_class<int> list1 = new genera_class<int>(1);
general_class<string> list2 = new genera_class<string>(2);
general_class<object> list3 = new genera_class<object>(3);
list1.array[0] = 1;
list2.array[0] = "one";
list2.array[1] = "two";
list3.array[0] = 23.456;
list3.arrya[1] = "thrre";
list3.array[2] = true;
Console.WriteLine(list1.array[0]);
Console.WriteLine(list2.array[0]);
Console.WriteLine(list2.array[1]);
Console.WriteLine(list3.array[0]);
Console.WriteLine(list3.array[1]);
Console.WriteLine(list3.array[2]);
}
// 출력값 : 1/one/two/23.456/three/True
모든 형식에 대응가능하지만,특정조건에만 만족하는 경우에만 사용할 수 있도록
제한을 할 수 있음.
where 형식매개변수 : 제약조건
private void general<T>(T value) where T : struct
{
Console.WriteLine(value); // 일반화 T value를 print힘.
}
private void Form1_Load(object sender, EventArgs e)
{
int[] one = {1, 2, 3};
string two = "일반화";
double three = 45.6;
bool four = true;
foreach(int num in one) general<int>)(num);
// general<string>(two);
general<double>(three);
// general<object>(four);
}
// 출력값 : 1/2/3/45.6/