어떤한 자료형이든 상관없이 변수를 받을 수 있는 것으로. Generic을 사용한 함수나 클래스를 호출할 때 원하는 자료형을 준다.
private void Swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } private void Start() { int val1 = 10; int val2 = 20; Swap<int>(ref val1, ref val2); print($"val1 = {val1}, val2 = {val2}"); string val3 = "abc"; string val4 = "defg"; Swap<string>(ref val3, ref val4); print($"val3 = {val3}, val4 = {val4}"); }
val1 = 20, val2 = 10
val3 = defg, val4 = abc
class Stack<T> { private int top = 1; private T[] values; public const int MaxCount = 10; public Stack() { values = new T[MaxCount]; } public void Push(T value) { Debug.Assert(top + 1 < MaxCount); values[++top] = value; } public T Pop() { Debug.Assert(Empty() == false); return values[top--]; } public bool Empty() { return top < 0 ? true : false; } }
예외 처리로 해당 조건에 맞지 않으면 정해진 메시지를 출력시킨다. Assert를 사용하면 어느부분에서 어떤 오류가 생기는지 알기 쉽다.