Generic Class란 ?? 제네릭 클래스는 특정 데이터 형식에 고유하지 않은 작업을 캡슐화합니다. 제네릭 클래스는 연결된 목록(linked list), 해시 테이블, 스택, 큐, 트리 등 컬렉션에서 항목을 추가하고 제거하는 등의 작업이 저장되는 데이터의 형식과 관계없이 동일한 방식으로 수행되는 컬렉션에 가장 일반적으로 사용됩니다. 제네릭 클래스는 비가변적입니다. 즉, 입력 매개 변수에서 List<BaseClass>를 지정하면 List<DerivedClass>를 제공하려고 할 때 컴파일 타임 오류가 발생하게 됩니다 |
형식 매개 변수와 제약 조건에 대한 규칙은 제네릭 클래스 동작에서 특히 상속과 멤버 액세스 가능성에 대해 몇 가지 영향을 줍니다. 계속하려면 몇 가지 용어를 이해하고 있어야 합니다. Node<T>, 제네릭 클래스의 경우 클라이언트 코드에서는 형식 인수를 지정하여 폐쇄형 생성 형식(Node<int>)을 만드는 방법으로 클래스를 참조하거나, 제네릭 기본 클래스를 지정하는 경우와 같이 형식 매개 변수를 지정하지 않고 개방형 생성 형식(Node<T>)을 만드는 방법으로 클래스를 참조할 수 있습니다. 제네릭 클래스는 구체적인 클래스, 폐쇄형 구성 클래스 또는 개방형 구성 기본 클래스에서 상속할 수 있습니다. |
Program.Cs |
using System;
//using System.Collections.Generic;
public class 제네릭클래스
{
public static void Main()
{
//기본클래스메서드 호출
//Hello h = new Hello();
//h.SayInt(1234); h.SayStr("안녕"); h.SayObj(DateTime.Now);
Hello<int> hi = new Hello<int>(); hi.Say(1234);
//hi.Say 정수형으로 받고 할경우
Hello<string> hs = new Hello<string>(); hs.Say("안녕");
//매개변수가 있는 생성자 만들어서 사용하는 경우
Hello<string> say = new Hello<string>("반갑습니다.");
say.Say(); //생성자 호출
say.SayType(); //생성자 호출
}
}
Hello Class Generic 타입 생성
//제닉클래스를 사용하고 할 경우(원하는 모든값을 전달 받아 사용 가능)
public class Hello<T>
{
private T msg;
//public Hello() { msg = default(T); }
// 매개없는 생성자와 같은 방식으로 전달하여 사용 가능
public Hello() { } //매개변수 없는 생성자
//매개변수가 있는 생성자 만들어서 사용하는 경우
public Hello(T msg) {this.msg = msg;}
public void Say() { Console.WriteLine("{0}", this.msg); }
public void Say(T msg) { Console.WriteLine("{0}",msg); }
public void SayType() {
T temp;
temp = default (T) ; //drfault 기본값을 초기화 해주기 위해 사용
Console.WriteLine("{0}", temp);
}
//가장 일반적으로 사용하고 있는 예제이다
//public void SayInt(int msg) {Console.WriteLine("{0}", msg); }
//public void SayStr(string msg) {Console.WriteLine("{0}",msg); }
//public void SayObj(object msg) {Console.WriteLine("{0}",msg); }
}
Generic Class관련하여 더 자세한 사항은 참고 바람)
http://msdn.microsoft.com/ko-kr/library/sz6zd40f.aspx
'.Net Project > .Net C#' 카테고리의 다른 글
95장 어트리뷰트(Attribute) (0) | 2009.08.18 |
---|---|
94장 형식매개변수에 대한 제약조건 (0) | 2009.08.18 |
92장 제네릭클래스(List Generic Class) (0) | 2009.08.17 |
91장 예외처리(Exception) (0) | 2009.08.17 |
90장 연산자오버로딩 (0) | 2009.08.17 |