58 lines
1.1 KiB
C#
58 lines
1.1 KiB
C#
class MyStack<T>
|
|
{
|
|
T[] _elements;
|
|
int pos = 0;
|
|
|
|
public MyStack()
|
|
{
|
|
_elements = new T[100];
|
|
}
|
|
|
|
public void Push(T element)
|
|
{
|
|
_elements[++pos] = element;
|
|
}
|
|
|
|
public T Pop()
|
|
{
|
|
return _elements[pos--];
|
|
}
|
|
}
|
|
|
|
internal class Program
|
|
{
|
|
private static void Main(string[] args)
|
|
{
|
|
|
|
// 두 개의 서로 다른 타입을 갖는 스택 객체를 생성
|
|
MyStack<int> numberStack = new MyStack<int>();
|
|
MyStack<string> nameStack = new MyStack<string>();
|
|
}
|
|
}
|
|
|
|
// T는 Value 타입
|
|
class MyClassS<T> where T : struct { }
|
|
|
|
// T는 Reference 타입
|
|
class MyClassC<T> where T : class { }
|
|
|
|
// T는 디폴트 생성자를 가져야 함
|
|
class MyClassD<T> where T : new() { }
|
|
|
|
// T는 EventArgs의 파생클래스이어야 함
|
|
class MyClassMyBase<T> where T : EventArgs { }
|
|
|
|
// T는 IComparable 인터페이스를 가져야 함
|
|
class MyClass<T> where T : IComparable { }
|
|
|
|
// 좀 더 복잡한 제약들
|
|
class EmployeeList<T> where T : EventArgs, IDisposable, IComparable<T>, new()
|
|
{
|
|
}
|
|
|
|
// 복수 타입 파라미터 제약
|
|
class MyClass<T, U>
|
|
where T : class
|
|
where U : struct
|
|
{
|
|
} |