using System;

public class CarValue<T> where T : struct { } // 값타입
public class CarReference<T> where T : class { } // 참조타입
public class CarNew<T> where T : new() { } // Default 생성자
public class CarClass<T> where T : Hyundai { } // Hyundai에서 파생된 것(클래스)이어야 한다.
public class CarInterface<T> where T : IKs { } // IKs인터페이스형이어야 한다.

public interface IKs { }
public class Hyundai { }
public class Sonata : Hyundai, IKs { }       

public class 형식매개변수에대한제약조건
{
    public static void Main()
    {
        CarValue<int> c = new CarValue<int>(); // 값타입이므로 struct 성공
        CarReference<string> cs = new CarReference<string>(); // 참조타입이므로 class 성공
        CarNew<Hyundai> cn = new CarNew<Hyundai>(); // new() 성공
        CarClass<Sonata> cc = new CarClass<Sonata>(); // 사용자 정의 타입
        CarInterface<IKs> h = new CarInterface<IKs>(); // 인터페이스
    }

}





/* MSDN 설명

where T: struct
 형식 인수가 값 형식이어야 합니다. Nullable를 제외한 임의의 값 형식을 지정할 수 있습니다. 자세한 내용은 Nullable 형식 사용(C# 프로그래밍 가이드)을 참조하십시오.
 
where T : class
 형식 인수가 참조 형식이어야 합니다. 이는 모든 클래스, 인터페이스, 대리자 또는 배열 형식에도 적용됩니다.
 
where T : new()
 형식 인수가 매개 변수 없는 공용 생성자여야 합니다. 다른 제약 조건과 함께 사용하는 경우 new() 제약 조건은 마지막에 지정해야 합니다.
 
where T : <기본 클래스 이름>
 형식 인수가 지정된 기본 클래스이거나 지정된 기본 클래스에서 파생되어야 합니다.
 
where T : <인터페이스 이름>
 형식 인수가 지정된 인터페이스이거나 지정된 인터페이스를 구현해야 합니다. 여러 인터페이스 제약 조건을 지정할 수 있습니다. 제한하는 인터페이스는 제네릭이 될 수도 있습니다.
 
where T : U
 T에 대해 지정한 형식 인수가 U에 대해 지정한 인수이거나 이 인수에서 파생되어야 합니다. 이를 naked 형식 제약 조건이라고 합니다. 

*/
 

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

알고리즘 - 12. 그룹(Group)  (0) 2009.08.18
78. 특성(Attribute)  (0) 2009.08.18
76. 제네릭클래스  (0) 2009.08.18
75. 리스트제네릭클래스  (0) 2009.08.17
74. 예외처리  (0) 2009.08.17
Posted by holland14
: