제네릭 형식 매개 변수(C# 프로그래밍 가이드)
제네릭 형식 또는 메서드 정의에서 형식 매개 변수는 클라이언트가 제네릭 형식의 변수를 인스턴스화할 때 지정하는 특정 형식에 대한 자리 표시자입니다.제네릭 소개(C# 프로그래밍 가이드)에 나열된 GenericList<T> 등의 제네릭 클래스는 실제로 형식이 아니고 형식에 대한 청사진과 같으므로 있는 그대로 사용할 수는 없습니다.클라이언트 코드에서 GenericList<T>를 사용하려면 꺾쇠괄호 내에 형식 매개 변수를 지정하는 방법으로 생성된 형식을 선언하고 인스턴스화해야 합니다.이 특정 클래스에 대한 형식 매개 변수의 형식은 컴파일러에서 인식하는 모든 형식이 될 수 있습니다.만들 수 있는 생성된 형식 인스턴스의 수에는 제한이 없고, 각 인스턴스에서는 다음과 같이 서로 다른 형식 매개 변수를 사용할 수 있습니다.
GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();
GenericList<T>의 각 인스턴스에서 클래스에 있는 모든 T는 런타임에 형식 매개 변수로 대체됩니다.이러한 대체를 통해 단일 클래스 정의를 사용하여 세 개의 형식 안전적이고 효율적인 개체를 개별적으로 만들 수 있습니다.CLR에서 이러한 대체를 수행하는 방식에 대한 자세한 내용은 런타임의 제네릭(C# 프로그래밍 가이드)을 참조하십시오.
형식 매개 변수 명명 지침
필수적 단일 문자 이름으로도 자체 설명이 가능하여 설명적인 이름을 굳이 사용할 필요가 없는 경우가 아니면 제네릭 형식 매개 변수 이름을 설명적인 이름으로 지정하십시오.
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
선택적 단일 문자 형식 매개 변수를 사용하는 형식에는 형식 매개 변수 이름으로 T를 사용하십시오.
public int IComparer<T>() { return 0; } public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
필수적 설명적인 형식 매개 변수 이름 앞에 “T”를 붙이십시오.
public interface ISessionChannel<TSession> { TSession Session { get; } }
선택적 매개 변수 이름 안에서 형식 매개 변수에 적용되는 제약 조건을 나타내십시오.예를 들어 ISession으로 제한되는 매개 변수의 이름은 TSession이 될 수 있습니다.
참고 항목
참조
C++ 템플릿과 C# 제네릭의 차이점(C# 프로그래밍 가이드)