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\#정적 다 태 성과 동적 다 태 성 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.만약 에 궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.