C #을 다형성
다형성은 여러 형태가 있다는 것을 의미한다.객체 지향 프로그래밍 패러다임 다형성 종종 표현은 "하나의 인터페이스, 다중 기능한다."
다형성은 정적 또는 동적 일 수있다. 응답 기능의정적 다형성은 컴파일시에 발생합니다.동적 다형성 응답 함수 실행시에 발생한다.
정적 다형성
컴파일시에, 연결기구의 기능과 객체는 정적 바인딩으로 알려진 초기 바인딩이라고합니다. C #을 정적 다형성을 구현하는 두 가지 기술을 제공합니다. 그들은 :
- 함수 오버로딩
- 연산자 오버로딩
오버로드는 다음 섹션에서 논의 할 것이다 운영자, 우리는 다음 함수 오버로딩에 대해 설명합니다.
함수 오버로딩
동일한 기능의 이름이 여러 정의가에 대해 동일한 범위에있을 수 있습니다. 서로가 매개 변수 목록의 매개 변수 유형이 될 수에서 정의 된 함수는 다른 매개 변수의 숫자가 될 수 달라야합니다. 당신은 함수 선언의 반환 형식 만 오버로드 할 수 없습니다.
다음의 예는 서로 다른 형태의 데이터를 인쇄하기위해, 동일한 기능 전단 ()의몇 가지 보여
시스템을 이용하여; 네임 스페이스 PolymorphismApplication { 클래스 Printdata { 무효 인쇄 (INT의 난) { Console.WriteLine ( "인쇄 INT : {0}", 나는); } 무효 인쇄 (더블 F) { Console.WriteLine ( "인쇄 플로트 : {0}", F); } 무효 인쇄 (문자열들) { Console.WriteLine ( "인쇄 문자열 : {0}",들); } 정적 무효 메인 (문자열 []에 인수) { Printdata P = 새로운 Printdata (); // 정수 p.print를 인쇄하려면 인쇄를 호출 (5); // 부동 소수점 p.print을 인쇄 (500.263)에 인쇄를 호출; // 호출 인쇄 문자열 p.print ( "안녕하세요 C ++")로 인쇄; Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
인쇄 INT : 5 인쇄 플로트 : 500.263 인쇄 문자열 : 안녕하세요 C ++
동적 다형성
C #은 추상 클래스, 인터페이스 구현 클래스의 일부를 제공 만들 키워드추상를 사용할 수 있습니다.파생 클래스는 추상 클래스에서 상속이 완료되면 달성했다.추상 클래스는 추상 메소드는 추상 메소드는 파생 클래스로 구현 할 수 있습니다 포함되어 있습니다.파생 클래스는보다 전문적인 기능을 가지고 있습니다.
다음은 추상 클래스에 대한 몇 가지 규칙이 있습니다 :
- 당신은 추상 클래스의 인스턴스를 만들 수 없습니다.
- 당신은 추상 클래스 외부의 추상 메소드를 선언 할 수 없습니다.
- 밀봉 클래스 정의 키워드 앞에 배치함으로써클래스밀봉 클래스로선언 할수있다.클래스밀봉 선언하면 상속 될 수 없다.밀봉으로 추상 클래스는 선언 할 수 없습니다.
다음 프로그램은 추상 클래스를 보여줍니다
시스템을 이용하여; 네임 스페이스 PolymorphismApplication { 추상 클래스 모양 { 공공 추상적 인 INT 지역 (); } 클래스 사각형 : 모양 { 개인 INT 길이; 개인 INT 폭; 공개 직사각형 (INT를 A = 0, B = 0 INT) { 길이는 =; 폭 = B를; } 공공 재정의 INT 지역 () { Console.WriteLine ( "사각형 클래스 영역 :"); 리턴 (폭 * 길이); } } 클래스 RectangleTester { 정적 무효 메인 (문자열 []에 인수) { 사각형 R = 새로운 Rectangle (10, 7); 더블 A = r.area (); Console.WriteLine ( "크기 : {0}", a); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
사각형 클래스 크기 : 지역 : 70
함수가 파생 클래스에서 구현되는 클래스의 요구에 정의되면, 당신은가상 방법을 사용할 수 있습니다.가상 방법은 키워드가상을 사용하여 선언됩니다.가상 방법은 다른 상속 클래스에서 다르게 구현 될 수있다. 가상 메소드 호출은 런타임에 발생합니다.
동적 다형성추상 클래스와 가상 방법을통해달성된다.
다음 프로그램은이 점을 보여줍니다
시스템을 이용하여; 네임 스페이스 PolymorphismApplication { 클래스 모양 { 보호 INT의 폭, 높이; 공개 형상 (INT를 A = 0, B = 0 INT) { 폭 = A; 높이 = B; } public 가상 INT 지역 () { Console.WriteLine ( "부모 면적 :"); 0을 반환; } } 클래스 사각형 : 모양 { 공개 직사각형 (INT를 A = 0, B = 0 INT) : 기재 (a, b) { } 공공 재정의 INT 지역 () { Console.WriteLine ( "사각형 클래스 영역 :"); 반환 (폭 * 높이); } } 클래스 삼각형 : 모양 { 공개 삼각형 (INT를 A = 0, B = 0 INT) : 기재 (a, b) { } 공공 재정의 INT 지역 () { Console.WriteLine ( "삼각형 클래스 영역 :"); 반환 (폭 * 높이 / 2); } } 클래스 발신자 { 공공 무효 CallArea (모양 쉬) { 을 int로; A = sh.area (); Console.WriteLine ( "크기 : {0}", a); } } 클래스 테스터 { 정적 무효 메인 (문자열 []에 인수) { 발신자 C = 새 발신자 (); 사각형 R = 새로운 Rectangle (10, 7); 삼각형 t = 새로운 삼각 (10, 5); c.CallArea (R); c.CallArea (t); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
사각형 클래스 크기 : 지역 : 70 클래스 삼각형 면적 : 지역 : 25