C# Language제네릭


통사론

  • public void SomeMethod <T> () { }
  • public void SomeMethod<T, V>() { }
  • public T SomeMethod<T>(IEnumerable<T> sequence) { ... }
  • public void SomeMethod<T>() where T : new() { }
  • public void SomeMethod<T, V>() where T : new() where V : struct { }
  • public void SomeMethod<T>() where T: IDisposable { }
  • public void SomeMethod<T>() where T: Foo { }
  • public class MyClass<T> { public T Data {get; set; } }

매개 변수

매개 변수 기술
T, V 일반 선언의 자리 표시 자 입력

비고

C #의 제네릭은 런타임까지 계속 지원됩니다. C #으로 작성된 제네릭 형식은 CIL로 컴파일 된 후에도 보존되는 일반적인 의미를 갖습니다.

이것은 C #에서 제네릭 형식을 반영하여 선언 된대로 볼 수 있거나 개체가 제네릭 형식의 인스턴스인지 확인할 수 있다는 것을 의미합니다. 이것은 컴파일 중 제네릭 형식 정보가 제거되는 형식 삭제 와는 대조적입니다. 또한 제네릭에 대한 템플리트 접근 방식과 달리 런타임에서 여러 구체적인 generic 유형이 여러 비 제네릭 유형이되고 원래 generic 유형 정의를 추가로 인스턴스화하는 데 필요한 메타 데이터가 손실됩니다.

그러나 제네릭 형식에 반영 할 때주의해야합니다. 제네릭 형식의 이름은 편집시 변형되고 대괄호 및 형식 매개 변수의 이름을 역 따옴표로 대체 한 다음 제네릭 형식 매개 변수의 개수로 대체됩니다. 따라서 Dictionary<TKey, Tvalue>Dictionary`2 로 변환됩니다.

제네릭 관련 예