77. 형식매개변수에 대한 제약조건
.NET프로그래밍/C# 3.5 SP1 2009. 8. 18. 10:04 |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 |