C # 제네릭 (일반)
일반 (일반)은 실제로 프로그램을 사용하는 시간이 될 때까지 사용자가 상기 사양의 클래스 또는 메소드 프로그래밍 요소의 데이터 유형의 제조를 지연시킬 수있다.즉, 어떤 데이터 유형으로 작업 할 수 있습니다 일반적인 클래스 나 메소드를 작성 할 수 있습니다.
당신은 매개 변수의 데이터 유형을 대체하여 사양 클래스 나 메소드를 작성할 수 있습니다. 함수는 생성자 메소드 호출 또는 컴파일러는 특정 데이터 타입을 처리하기위한 코드를 생성하는 클래스가 발생하면. 다음의 간단한 예제는이 개념을 이해하는 데 도움이 될 것입니다 :
시스템을 이용하여; System.Collections.Generic을 사용함; 네임 스페이스 GenericApplication { 공용 클래스 MyGenericArray <T> { 개인 T [] 배열; 공공 MyGenericArray (INT 크기) { 배열 = 새로운 T [크기 + 1]; } 공공 T의 getItem (INT 지수) { 배열 [인덱스]를 반환; } 공공 무효 setItem (INT 지수, T 값) { 배열 [인덱스] 값을 =; } } 클래스 테스터 { 정적 무효 메인 (문자열 []에 인수) { // 정수 배열 MyGenericArray를 <INT> intArray = 새로운 MyGenericArray <INT> 선언 (5); 의 값을 설정 // (; 다 <5; INT C = 0 C ++) { intArray.setItem (C, C * 5); } 가치를 얻기 // (; 다 <5; INT C = 0 C ++) { Console.Write (intArray.getItem (c) + ""); } Console.WriteLine (); // 문자 배열 MyGenericArray을 <문자> charArray = 새로운 MyGenericArray <문자> 선언 (5); 의 값을 설정 // (; 다 <5; INT C = 0 C ++) { charArray.setItem (C, (문자) (C + 97)); } 가치를 얻기 // (; 다 <5; INT C = 0 C ++) { Console.Write (charArray.getItem (c) + ""); } Console.WriteLine (); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
05101520 ABCDE
일반 (일반) 기능
범용의 사용은 구체적으로 다음과 같은 측면에서 기술 능력을 강화하는 프로그램이다 :
- 그것은 당신이 코드 재사용, 안전 보호 및 개선 성능의 유형을 극대화 할 수 있습니다.
- 당신은 일반 컬렉션 클래스를 만들 수 있습니다. .NET Framework 클래스 라이브러리는System.Collections.Generic 네임스페이스의 몇 가지 새로운 제네릭 컬렉션 클래스가 포함되어 있습니다.대신은 System.Collections 컬렉션클래스 이러한 제네릭 컬렉션 클래스를 사용할 수 있습니다.
- 당신은 당신의 자신의 일반적인 인터페이스, 일반적인 클래스, 일반적인 방법 일반 이벤트 및 일반 대리자를 만들 수 있습니다.
- 당신은 특정 데이터 형식에 액세스 할 수 제네릭 클래스를 제한 할 수 있습니다.
- 정보의 유형에 대한 일반적인 사용되는 데이터 유형을 반영하여 실행 시간에 얻을 수있다.
일반 (일반) 방법
위의 예에서, 우리는 제네릭 클래스를 사용하여, 우리는 일반적인 방법 유형 매개 변수를 선언 할 수 있습니다. 다음 프로그램은이 개념을 설명합니다 :
시스템을 이용하여; System.Collections.Generic을 사용함; 네임 스페이스 GenericMethodAppl { 클래스 프로그램 { 정적 무효 스왑 <T> (참고 T의 좌, 심판 T의 우) { T 온도; 온도 = 좌; 좌 = 우; 우 = 임시; } 정적 무효 메인 (문자열 []에 인수) { A, B를 int로; 숯불 C, D; A = 10; B = 20; C = 'I'; d 개 = 'V'; // ( "지능 값 스왑을 호출하기 전에 :")를 교환 가치 Console.WriteLine을하기 전에 디스플레이; Console.WriteLine ( "A = {0}, B = {1},"A, B); Console.WriteLine ( "char 값 스왑을 호출하기 전에 :"); Console.WriteLine ( "C = {0}, D = {1} ', C, D); // 통화 스왑 스왑 <INT> (심판 B, A를 심판); 스왑 <문자> (심판 C, 심판 D); // 표시 값 Console.WriteLine을 교환 한 후 ( "스왑을 호출 한 후 지능 값 :"); Console.WriteLine ( "A = {0}, B = {1},"A, B); Console.WriteLine ( "char 값 스왑을 호출 한 후 :"); Console.WriteLine ( "C = {0}, D = {1} ', C, D); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
통화 스왑 전에 INT 값 : A = 10, B = 20 통화 스왑 전에 문자 값 : C = I, D = V 스왑을 호출 한 후 INT 값 : A = 20, B = 10 스왑을 호출 한 후 숯불 값 : C = V, D = I
의뢰 일반 (일반)
당신은 제네릭 대리자 형식 매개 변수를 통해 정의 할 수 있습니다. 예를 들면 :
위임 T NumberChanger <T> (T n을);
다음의 예는위원회의 사용을 보여줍니다 :
시스템을 이용하여; System.Collections.Generic을 사용함; 위임 T NumberChanger <T> (T n을); 네임 스페이스 GenericDelegateAppl { 클래스 TestDelegate { 정적 INT의 납입 = 10; 공공 정적 INT ADDNUM (INT 페이지) { NUM + = 피; NUM을 반환; } 공공 정적 INT MultNum (INT Q) { NUM * = Q; NUM을 반환; } 공공 정적 INT getNum () { NUM을 반환; } 정적 무효 메인 (문자열 []에 인수) { // 대리자 인스턴스 NumberChanger <INT> NC1 = 새로운 NumberChanger <INT> (ADDNUM) 만들기; NumberChanger <INT> NC2 = 새로운 NumberChanger <INT> (MultNum); // 대리자 개체 NC1 (25)를 사용하여 메서드를 호출; Console.WriteLine ( "민의 값 : {0}", getNum ()); NC2 (5); Console.WriteLine ( "민의 값 : {0}", getNum ()); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
민의 값 : 35 민의 값 : 175