C#Generics (한국어)

0 Comments

Generic 은 특정 형식이 아닌 일반적인 형식을 의미합니다. C#에서 generic 은 특정 데이터 유형에 특정하지 않음을 의미합니다.

C#할 수 있을 정의하는 일반적인 클래스,인터페이스,추상 클래스 분야,방법,정적 방법,특성,이벤트,대리인 및 사업자를 사용하여 입력 매개변수는 없이 특정 데이터 형식입니다. 유형 매개 변수는 제네릭 유형의 인스턴스를 만들 때 지정된 특정 유형의 자리 표시 자입니다.

제네릭 형식은 형식 이름 뒤에 꺾쇠 괄호에 형식 매개 변수를 지정하여 선언됩니다(예:, TypeName<T>여기서T는 형식 매개 변수입니다.

일반 Class

일반적인 클래스가 정의된 유형 매개 변수를 사용하여 각도에서 괄호 후에 주석을 사용하는 것이 중요합니다. 다음은 일반 클래스를 정의합니다.

예:정의 클래스 일반적인

위의DataStore는 일반적인 클래스입니다., T이라고 입력 매개 변수로 사용될 수 있는 형식의 필드는,속성,방법,매개 변수,유형이 반환,그리고 대리인DataStore클래스입니다. 예를 들어,Data는 일반적인 속성이기 때문에 우리가 사용 유형을 매개 변수를T으로 입력하는 대신 특정 데이터 형식입니다.

참고
형식 매개 변수로T를 사용할 필요는 없습니다. 유형 매개 변수에 임의의 이름을 지정할 수 있습니다., 일반적으로T는 하나의 유형 매개 변수 만있을 때 사용됩니다. 를 사용하는 것이 좋 더 읽기 쉬운 형식을 매개 변수 이름을 요구 사항에 따라 다음과 같TSession,TKey,TValueetc. 에 대해 더 알아보 입력 매개 변수명 지침

정의할 수도 있습니다 여러 유형 매개변수를 쉼표로 구분됩니다.

일반 클래스 인스턴스화

꺾쇠 괄호에 실제 유형을 지정하여 일반 클래스 인스턴스를 만들 수 있습니다., 다음은 제네릭 클래스DataStore의 인스턴스를 만듭니다.

위에,우리는 우리를 지정한string유형에서 각괄호를 생성하는 동안 인스턴스입니다. 따라서T는 컴파일 타임에 전체 클래스에서string유형으로 대체됩니다. 따라서Data속성의 유형은string입니다.

다음 그림은 제네릭의 작동 방식을 보여줍니다.,

에 할당할 수 있는 문자열 값을Data을 제공합니다. 문자열 이외의 값을 할당하려고하면 컴파일 타임 오류가 발생합니다.

지정할 수 있습니다 다양한 데이터 유형에 대한 다른 개체로서,다음과 같습니다.

광고

클래스 일반적인 특성

  • 일반적인 클래스가 증가 재사용. 형식 매개 변수가 많을수록 재사용이 가능하다는 것을 의미합니다., 그러나 일반화가 너무 많으면 코드를 이해하고 유지하기가 어렵습니다.
  • 일반적인 클래스가 될 수 있습니다 기본 클래스가 다른 일반 또는 제네릭이 아닌 클래스 또는 추상 클래스입니다.
  • 일반적인 클래스에서 파생될 수 있습 다른 일반 또는 non-일반 인터페이스 클래스,또는 추상 클래스입니다.

일반 필드

일반 클래스에는 일반 필드가 포함될 수 있습니다. 그러나 초기화 할 수 없습니다.

를 들어:일반적인 분야

다음을 선언하는 일반적인 배열입니다.,

를 들어:일반적인 배열

일반적인 방법

방법으로 선언된 입력 매개변수에 대한 형식 또는 변수라고 하는 일반적인 방법입니다.

위의AddorUpdate()GetData()방법은 일반적인 방법입니다. 실제 데이터의 유형item매개 변수 지정된 시간에서의 인스턴스화DataStore<T>클래스로 아래와 같습니다.,

는 일반적인 매개변수 유형과 함께 사용할 수 있는 여러 매개변수와 함께 또는없이 아닌 일반적인 매개 변수익 유형입니다. 다음은 유효한 제네릭 메소드 오버로딩입니다.

비 제네릭 클래스는 아래 그림과 같이 꺾쇠 괄호에 형식 매개 변수를 지정하여 제네릭 메소드를 포함 할 수 있습니다.

제네릭의 장점

  1. 제네릭은 코드의 재사용 성을 증가시킵니다. 다른 데이터 유형을 처리 할 코드를 작성하지 않아도됩니다.
  2. 제네릭은 유형-안전합니다., 정의에 지정된 것과 다른 데이터 유형을 사용하려고하면 컴파일 타임 오류가 발생합니다.
  3. Generic 은 권투 및 언 박싱의 가능성을 제거하기 때문에 성능 이점이 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다