자세 한 설명 c\#다 중

7751 단어 c#다 형
다 태 는 같은 행위 가 여러 가지 서로 다른 표현 형식 이나 형 태 를 가 진 능력 이다.
다 태 성 은 여러 가지 형식 을 의미한다.대상 을 대상 으로 프로 그래 밍 하 는 범례 에서 다 형 성 은 흔히'하나의 인터페이스,여러 가지 기능'으로 나타난다.
다 태 성 은 정적 이거 나 동적 일 수 있다.정적 다 형 성에 서 함수 의 응답 은 컴 파일 할 때 발생 합 니 다.동적 다 태 성 에서 함수 의 응답 은 운행 할 때 발생 한다.
C\#에서 모든 유형 은 다 중 입 니 다.사용자 정의 유형 을 포함 한 모든 유형 이 Object 에서 계승 되 기 때 문 입 니 다.
다 태 는 같은 인터페이스 입 니 다.서로 다른 실례 를 사용 하여 서로 다른 조작 을 수행 합 니 다.그림 에서 보 듯 이:

현실 에서,예 를 들 어 우리 가 F1 키 를 누 르 면 이 동작 은:
  • 현재 Flash 인터페이스 에서 나타 나 는 것 이 AS 3 의 도움말 문서 라면..
  • 현재 Word 에서 팝 업 되 는 것 이 Word 도움말 이 라면..
  • Windows 에서 팝 업 되 는 것 은 Windows 도움말 과 지원 입 니 다
  • 같은 사건 은 서로 다른 대상 에서 발생 하면 서로 다른 결 과 를 낳 을 수 있다.
    정적 다 태 성
    컴 파일 할 때 함수 와 대상 의 연결 체 제 는 초기 바 인 딩 이 라 고도 부 르 고 정적 바 인 딩 이 라 고도 부른다.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.추상 적 인 외부 에서 추상 적 인 방법 을 설명 할 수 없습니다
  • 클래스 정의 앞 에 키워드 sealed 를 설치 하면 클래스 를 밀봉 류 로 설명 할 수 있 습 니 다.하나의 클래스 가 sealed 로 밝 혀 졌 을 때,그것 은 계승 되 지 않 습 니 다.추상 류 는 sealed 로 설명 할 수 없습니다.
  • 다음 프로그램 은 추상 적 인 종 류 를 보 여 줍 니 다.
    
    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\#다 형 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기