c# 제네릭 예제

일반 클래스는 각도 괄호 를 사용하여 정의할 수 있습니다. 예를 들어 다음은 제네릭 멤버 변수, 제네릭 메서드 및 속성이 있는 간단한 제네릭 클래스입니다. 제네릭 클래스의 개체를 만들려면 다음 구문이 사용됩니다: c#에서는 제네릭 클래스를 기본 클래스로 사용할 수 있지만 run에서 기본 클래스를 인스턴스화하는 데 필요한 형식 인수를 보낼 방법이 없으므로 기본 클래스에 대한 형식 매개 변수 대신 형식을 제공해야 합니다. 시간. 위의 예에서는 int, 문자열 및 사용자 지정 클래스를 사용한 GenericClass를 선언했습니다. 제네릭 클래스의 형식 매개 변수입니다. 함께 제네릭 클래스를 인스턴스화한 경우 DoWork 메서드에서만 int를 전달할 수 있습니다. MyGenricClass를 인스턴스화하는 동안 모든 유형을 사용할 수 있습니다. 예를 들어 다음 예제에서는 문자열 형식을 사용합니다. 특정 데이터 형식의 메서드에 액세스할 수 있도록 제한된 제네릭 클래스를 만들 수 있습니다. 위의 클래스를 관찰하는 경우, 우리는 하나의 매개 변수 (msg) 및 방법 (genericMethod)을 사용하여 클래스 (GenericClass)를 만들었습니다 () 괄호와 자리 표시자로 형식 매개 변수 (T)를 사용하여.

제네릭 컬렉션 클래스를 만들 수 있습니다. .NET Framework 클래스 라이브러리에는 System.Collections.Generic 네임스페이스에 몇 가지 새로운 제네릭 컬렉션 클래스가 포함되어 있습니다. System.Collections 네임스페이스의 컬렉션 클래스 대신 이러한 제네릭 컬렉션 클래스를 사용할 수 있습니다. 이전 섹션에서 이미 배웠듯이 대리자는 호출할 수 있는 메서드의 서명을 정의합니다. 제네릭 대리자는 대리자와 동일한 방식으로 정의할 수 있지만 제네릭 형식을 사용할 수 있습니다. 제네릭 기본 클래스에 제약 조건이 있는 경우 파생 클래스는 동일한 제약 조건을 사용해야 합니다. 설명: 앞의 예제에서는 제네릭 형식 매개 변수 `T`를 사용하는 제네릭 클래스 GFG를 정의합니다. Main() 메서드에서 GFG의 두 인스턴스는 `T`를 `문자열` 및 `float` 데이터 형식으로 대체하여 만들어졌습니다. 이러한 개체는 각각 `문자열` 및 `float` 값을 저장하는 데 사용됩니다. GFG 클래스는 생성자에서 필요한 형식을 수락하여 형식 안전성을 보장합니다.

c#에서 제네릭은 자리 표시자(형식 매개 변수)를 사용하여 클래스, 구조체, 인터페이스 또는 메서드를 정의하는 데 사용되는 형식으로, 하나 이상의 형식을 저장하거나 사용할 수 있음을 나타냅니다. c#에서 컴파일러는 자리 표시자를 컴파일 타임에 지정된 형식으로 바꿉습니다. c#에서, 우리는 또한 형식 안전하고 효율적인 우리 자신의 일반화 된 솔루션을 제공하기 위해 우리 자신의 사용자 정의 제네릭 유형 및 방법을 만들 수 있습니다. .NET은 여러 일반 클래스와 인터페이스를 제공합니다. 이러한 파일은 System.Collections.Generic 네임스페이스에 있습니다. 일부는 아래에 나열되어 있습니다: 여기, 각도 () 괄호는 GenericClass는 제네릭을 나타내고 형식 매개 변수 (T)는 요청된 형식을 수락하는 데 사용됩니다. 형식 매개 변수 이름은 요구 사항에 따라 X 또는 U 등과 같을 수 있습니다. 제네릭을 사용하면 프로그램에서 실제로 사용될 때까지 클래스 또는 메서드에서 프로그래밍 요소의 데이터 형식의 사양을 정의할 수 있습니다. 즉, 제네릭을 사용하면 모든 데이터 형식에서 작업할 수 있는 클래스 나 메서드를 작성할 수 있습니다. 제네릭 메서드가 제네릭 클래스 내에 있는 경우 형식 매개 변수 식별자에 주의해야 합니다. 해당 클래스에 T 형식이 있는 경우 메서드에 다른 형식(U, Y, R…)이 있어야 합니다. 그렇지 않으면 메서드의 T 형식은 클래스에서 T 형식을 숨깁니다.

제네릭은 C# 언어의 버전 2.0과 공통 언어 런타임(CLR)에 추가되었습니다. 제네릭은 .NET Framework에 형식 매개 변수의 개념을 도입하여 클래스 또는 메서드가 클라이언트 코드에 의해 선언되고 인스턴스화될 때까지 하나 이상의 형식의 사양을 연기하는 클래스 및 메서드를 디자인할 수 있습니다.