자세 한 설명 c\#다 중
다 태 성 은 여러 가지 형식 을 의미한다.대상 을 대상 으로 프로 그래 밍 하 는 범례 에서 다 형 성 은 흔히'하나의 인터페이스,여러 가지 기능'으로 나타난다.
다 태 성 은 정적 이거 나 동적 일 수 있다.정적 다 형 성에 서 함수 의 응답 은 컴 파일 할 때 발생 합 니 다.동적 다 태 성 에서 함수 의 응답 은 운행 할 때 발생 한다.
C\#에서 모든 유형 은 다 중 입 니 다.사용자 정의 유형 을 포함 한 모든 유형 이 Object 에서 계승 되 기 때 문 입 니 다.
다 태 는 같은 인터페이스 입 니 다.서로 다른 실례 를 사용 하여 서로 다른 조작 을 수행 합 니 다.그림 에서 보 듯 이:
현실 에서,예 를 들 어 우리 가 F1 키 를 누 르 면 이 동작 은:
정적 다 태 성
컴 파일 할 때 함수 와 대상 의 연결 체 제 는 초기 바 인 딩 이 라 고도 부 르 고 정적 바 인 딩 이 라 고도 부른다.C\#정적 다 태 성 을 실현 하기 위해 두 가지 기술 을 제공 했다.각각:
함수 과부하
연산 자 과부하
연산 자 리 셋 은 다음 장 에서 토론 할 것 이 며,다음 에 우 리 는 함수 리 셋 을 토론 할 것 이다.
함수 과부하
같은 범위 내 에서 같은 함수 이름 에 대해 여러 개의 정 의 를 내 릴 수 있 습 니 다.함수 의 정 의 는 서로 다 르 게 해 야 합 니 다.매개 변수 목록 의 매개 변수 유형 이 다 를 수도 있 고 매개 변수 개수 가 다 를 수도 있 습 니 다.다시 불 러 올 수 없습니다.형식 이 다른 함수 성명 만 되 돌려 줍 니 다.
다음 인 스 턴 스 는 같은 함수 Add()를 보 여 줍 니 다.서로 다른 매개 변 수 를 추가 처리 하 는 데 사 용 됩 니 다.
using System;
namespace PolymorphismApplication
{
public class TestData
{
public int Add(int a, int b, int c)
{
return a + b + c;
}
public int Add(int a, int b)
{
return a + b;
}
}
class Program
{
static void Main(string[] args)
{
TestData dataClass = new TestData();
int add1 = dataClass.Add(1, 2);
int add2 = dataClass.Add(1, 2, 3);
Console.WriteLine("add1 :" + add1);
Console.WriteLine("add2 :" + add2);
}
}
}
다음 인 스 턴 스 는 같은 함수 print()를 보 여 줍 니 다.다른 데이터 형식 을 인쇄 하 는 데 사 용 됩 니 다.
using System;
namespace PolymorphismApplication
{
class Printdata
{
void print(int i)
{
Console.WriteLine(" : {0}", i );
}
void print(double f)
{
Console.WriteLine(" : {0}" , f);
}
void print(string s)
{
Console.WriteLine(" : {0}", s);
}
static void Main(string[] args)
{
Printdata p = new Printdata();
// print
p.print(1);
// print
p.print(1.23);
// print
p.print("Hello Runoob");
Console.ReadKey();
}
}
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.출력 정형:1
출력 부동 소수점:1.23
출력 문자열:Hello Runoob
동적 다 태 성
C\#키워드 abstract 를 사용 하여 추상 클래스 를 만 들 수 있 습 니 다.인 터 페 이 스 를 제공 하 는 일부 클래스 의 실현 에 사용 합 니 다.하나의 파생 류 가 이 추상 류 에서 계승 되 었 을 때 실현 은 곧 완성 된다.추상 류 는 추상 적 인 방법 을 포함 하고 추상 적 인 방법 은 파생 류 에 의 해 실 현 될 수 있다.파생 류 는 더욱 전문 적 인 기능 을 가지 고 있다.
다음은 추상 류 와 관련 된 규칙 들 입 니 다.
4.567917.추상 적 인 인 인 스 턴 스 를 만 들 수 없습니다4.567917.추상 적 인 외부 에서 추상 적 인 방법 을 설명 할 수 없습니다
using System;
namespace PolymorphismApplication
{
abstract class Shape
{
abstract public 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 성명 을 사용 합 니 다.
가상 방법 은 서로 다른 계승 류 에서 서로 다른 실현 을 할 수 있다.
가상 방법 에 대한 호출 은 운행 할 때 발생 한다.
동적 다 형 성 은 추상 류 와 가상 방법 을 통 해 이 루어 진 것 이다.
다음 인 스 턴 스 는 Shape 기본 클래스 를 만 들 고 파생 클래스 Circle,Rectangle,Triangle 을 만 듭 니 다.Shape 류 는 Draw 라 는 가상 방법 을 제공 합 니 다.각 파생 클래스 에서 이 방법 을 다시 써 서 지정 한 모양 을 그립 니 다.
using System;
using System.Collections.Generic;
public class Shape
{
public int X { get; private set; }
public int Y { get; private set; }
public int Height { get; set; }
public int Width { get; set; }
//
public virtual void Draw()
{
Console.WriteLine(" ");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine(" ");
base.Draw();
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine(" ");
base.Draw();
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine(" ");
base.Draw();
}
}
class Program
{
static void Main(string[] args)
{
// List<Shape> , Circle、Triangle Rectangle
var shapes = new List<Shape>
{
new Rectangle(),
new Triangle(),
new Circle()
};
// foreach , Shape Draw
foreach (var shape in shapes)
{
shape.Draw();
}
Console.WriteLine(" 。");
Console.ReadKey();
}
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.장방형 을 그리다
기본 클래스 의 그림 그리 기 작업 을 수행 합 니 다.
삼각형 을 하나 그리다
기본 클래스 의 그림 그리 기 작업 을 수행 합 니 다.
원형 을 그리다
기본 클래스 의 그림 그리 기 작업 을 수행 합 니 다.
임의의 키 를 누 르 고 퇴장 합 니 다.
다음 프로그램 은 가상 방법 area()를 통 해 서로 다른 모양 의 그림 의 면적 을 계산 하 는 것 을 보 여 줍 니 다.
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\#다 형 에 대한 상세 한 내용 입 니 다.c\#다 형 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.