제네릭은 클래스를 선언할 때 int, float과 같은 데이터 타입을 정하지 않고, 데이터 타입을 형식 매개변수(Type Parameter)로 받아들이도록한다.
class MyData<T>
{
T data;
public MyData() { }
public MyData(T data)
{
this.data = data;
}
public T Data { get { return data; } set { data = value; } }
}
class Program
{
static void Main(string[] args)
{
MyData<int> myData = new MyData<int>();
MyData<float> myData2 = new MyData<float>(3.14f);
MyData<string> myData3 = new MyData<string>();
myData.Data = 10;
myData3.Data = "hello, world";
Console.WriteLine(myData.Data);
Console.WriteLine(myData2.Data);
Console.WriteLine(myData3.Data);
}
}
class MyData<T, U>
{
T key;
U value;
public MyData() { }
public MyData(T key, U value )
{
this.key = key;
this.value = value;
}
public T Key { get { return key; } set { key = value; } }
public U Value { get { return value; } set { this.value = value; } }
}
class Program
{
static void Main(string[] args)
{
MyData<int,string> myData = new MyData<int,string>(1,"kim");
MyData<int,string> myData2 = new MyData<int,string>(2,"jeong");
MyData<int,string> myData3 = new MyData<int,string>(3,"choi");
Console.WriteLine($"key : {myData.Key} value : {myData.Value}");
Console.WriteLine($"key : {myData2.Key} value : {myData2.Value}");
Console.WriteLine($"key : {myData3.Key} value : {myData3.Value}");
}
}
class MyData<T, U>
where T : class
where U : struct
{
T key;
U value;
public MyData() { }
public MyData(T key, U value )
{
this.key = key;
this.value = value;
}
public T Key { get { return key; } set { key = value; } }
public U Value { get { return value; } set { this.value = value; } }
}
class Program
{
static void Main(string[] args)
{
MyData<int,string> myData = new MyData<int,string>(1,"kim"); //오류발생
Console.WriteLine($"key : {myData.Key} value : {myData.Value}");
}
}