>  기사  >  백엔드 개발  >  [C# 튜토리얼] C# 다형성

[C# 튜토리얼] C# 다형성

黄舟
黄舟원래의
2016-12-24 13:49:201318검색

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 类的面积:
面积: 70
When 클래스에 정의된 함수이고 상속된 클래스에서 구현되어야 하는 경우 가상 메서드를 사용할 수 있습니다. 가상 메서드는 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 类的面积:
面积:70
Triangle 类的面积:
面积:25
그게 다입니다. [C# Tutorial ] C# 다형성 내용, 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.