c\#정적 다 태 성과 동적 다 태 성 깊이 분석

C\#다 태 성
다 태 성 은 여러 가지 형식 을 의미한다.대상 을 대상 으로 프로 그래 밍 하 는 범례 에서 다 형 성 은 흔히'하나의 인터페이스,여러 가지 기능'으로 나타난다.
다 태 성 은 정적 이거 나 동적 일 수 있다.정적 다 형 성에 서 함수 의 응답 은 컴 파일 할 때 발생 합 니 다.동적 다 태 성 에서 함수 의 응답 은 운행 할 때 발생 한다.
정적 다 태 성
컴 파일 할 때 함수 와 대상 의 연결 체 제 는 초기 바 인 딩 이 라 고도 부 르 고 정적 바 인 딩 이 라 고도 부른다.C\#정적 다 태 성 을 실현 하기 위해 두 가지 기술 을 제공 했다.각각:
함수 리 로드
연산 자
연산 자 리 셋 은 다음 장 에서 토론 할 것 이 며,다음 에 우 리 는 함수 리 셋 을 토론 할 것 이다.
함수 과부하
같은 범위 내 에서 같은 함수 이름 에 대해 여러 개의 정 의 를 내 릴 수 있 습 니 다.함수 의 정 의 는 서로 다 르 게 해 야 합 니 다.매개 변수 목록 의 매개 변수 유형 이 다 를 수도 있 고 매개 변수 개수 가 다 를 수도 있 습 니 다.다시 불 러 올 수 없습니다.형식 이 다른 함수 성명 만 되 돌려 줍 니 다.
다음 인 스 턴 스 는 같은 함수 print()를 보 여 줍 니 다.다른 데이터 형식 을 인쇄 하 는 데 사 용 됩 니 다.

using System;
namespace PolymorphismApplication
{
  class Printdata
  {
   void print(int i)
   {
     Console.WriteLine("Printing int: {0}", i );
   }
   void print(double f)
   {
     Console.WriteLine("Printing float: {0}" , f);
   }
   void print(string s)
   {
     Console.WriteLine("Printing string: {0}", s);
   }
   static void Main(string[] args)
   {
     Printdata p = new Printdata();
     //    print      
     p.print(5);
     //    print       
     p.print(500.263);
     //    print       
     p.print("Hello C#");
     Console.ReadKey();
   }
  }
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
Printing int: 5
Printing float: 500.263
Printing string: Hello C#
동적 다 태 성
C\#키워드 abstract 를 사용 하여 추상 클래스 를 만 들 수 있 습 니 다.인 터 페 이 스 를 제공 하 는 일부 클래스 의 실현 에 사용 합 니 다.하나의 파생 류 가 이 추상 류 에서 계승 되 었 을 때 실현 은 곧 완성 된다.추상 류 는 추상 적 인 방법 을 포함 하고 추상 적 인 방법 은 파생 류 에 의 해 실 현 될 수 있다.파생 류 는 더욱 전문 적 인 기능 을 가지 고 있다.
다음은 추상 류 와 관련 된 규칙 들 입 니 다.
•추상 적 인 인 인 스 턴 스 를 만 들 수 없습니다.
•추상 적 인 외부 에서 추상 적 인 방법 을 설명 할 수 없습니다.
•클래스 정의 앞 에 키워드 sealed 를 설치 하면 클래스 를 밀봉 류 로 설명 할 수 있 습 니 다.하나의 클래스 가 sealed 로 밝 혀 졌 을 때,그것 은 계승 되 지 않 습 니 다.추상 류 는 sealed 로 설명 할 수 없습니다.
다음 프로그램 은 추상 적 인 종 류 를 보 여 줍 니 다.

using System;
namespace PolymorphismApplication
{
  abstract class Shape
  {
   public abstract int area();
  }
  class Rectangle: Shape
  {
   private int length;
   private int width;
   public Rectangle( int a=0, int b=0)
   {
     length = a;
     width = b;
   }
   public override int area ()
   { 
     Console.WriteLine("Rectangle     :");
     return (width * length); 
   }
  }
  class RectangleTester
  {
   static void Main(string[] args)
   {
     Rectangle r = new Rectangle(10, 7);
     double a = r.area();
     Console.WriteLine("  : {0}",a);
     Console.ReadKey();
   }
  }
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
Rectangle 클래스 의 면적:
면적
클래스 에 정 의 된 함수 가 계승 클래스 에서 이 루어 져 야 할 때 가상 방법 을 사용 할 수 있 습 니 다.가상 방법 은 키워드 virtual 성명 을 사용 합 니 다.가상 방법 은 서로 다른 계승 류 에서 서로 다른 실현 을 할 수 있다.가상 방법 에 대한 호출 은 운행 할 때 발생 한다.
동적 다 형 성 은 추상 류 와 가상 방법 을 통 해 이 루어 진 것 이다.
다음 프로그램 은 이 점 을 보 여 줍 니 다.

using System;
namespace PolymorphismApplication
{
  class Shape 
  {
   protected int width, height;
   public Shape( int a=0, int b=0)
   {
     width = a;
     height = b;
   }
   public virtual int area()
   {
     Console.WriteLine("     :");
     return 0;
   }
  }
  class Rectangle: Shape
  {
   public Rectangle( int a=0, int b=0): base(a, b)
   {
   }
   public override int area ()
   {
     Console.WriteLine("Rectangle     :");
     return (width * height); 
   }
  }
  class Triangle: Shape
  {
   public Triangle(int a = 0, int b = 0): base(a, b)
   {
   }
   public override int area()
   {
     Console.WriteLine("Triangle     :");
     return (width * height / 2); 
   }
  }
  class Caller
  {
   public void CallArea(Shape sh)
   {
     int a;
     a = sh.area();
     Console.WriteLine("  : {0}", a);
   }
  } 
  class Tester
  {
   static void Main(string[] args)
   {
     Caller c = new Caller();
     Rectangle r = new Rectangle(10, 7);
     Triangle t = new Triangle(10, 5);
     c.CallArea(r);
     c.CallArea(t);
     Console.ReadKey();
   }
  }
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
Rectangle 클래스 의 면적:
면적
Triangle 류 의 면적:
면적:25
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 c\#정적 다 태 성과 동적 다 태 성 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.만약 에 궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기