>  기사  >  백엔드 개발  >  C#의 다형성

C#의 다형성

WBOY
WBOY원래의
2024-09-03 15:26:15974검색

다형성은 C#과 같은 객체 지향 프로그래밍 언어에서 달성되는 개념으로, 연산자나 함수형 메서드는 실행 프로세스 전반에 걸쳐 두 가지 이상의 형식을 취할 수 있습니다. 프로그램에서 상속을 구현하는 데 널리 사용되며 이는 연산자 오버로딩과 함수 오버로딩의 두 가지 방법으로 분류됩니다. 다형성은 간단히 말해서 두 클래스가 서로 다른 속성을 갖는 파생 클래스를 사용하여 기본 클래스를 변경하는 기술로 설명할 수 있습니다.

다음 다이어그램은 다형성의 작동을 보여줍니다.

C#의 다형성

이 그림은 점토가 냄비, 그릇, 장난감 물건을 만드는 상위 개체임을 설명합니다. 이 사물들은 모두 서로 다르지만 점토의 성질을 갖고 있다. 이 세 가지 오브제는 같은 재료인 점토로 만들어졌음에도 모양이 다르고, 사용되는 방식도 다릅니다.

다형성의 형태

다음은 다형성의 두 가지 형태입니다.

1. 연산자 오버로딩

연산자는 연산 중인 피연산자 유형에 따라 다양한 출력을 제공할 수 있습니다. 이를 연산자 오버로딩이라고 합니다. 예를 들어 연산자 '+'는 두 정수에 대한 덧셈을 수행할 수 있고 두 문자열을 연결할 수 있습니다. 따라서 동일한 연산자를 2가지 다른 방식으로 사용할 수 있습니다. 더하기 연산자는 일반적으로 두 개의 숫자를 더합니다. 그러나 복소수의 경우 덧셈이 조금 달라 해당 실수부와 허수부가 별도로 덧셈됩니다. 다음은 '+' 연산자를 오버로드하여 복소수를 더하는 방법을 보여주는 예제 코드입니다.

코드:

using System;
namespace Overload {
class Complex
{
public double x;
public double y;
// no-argument constructor
public Complex() {}
// parameterized constructor
public Complex(double real, double img)
{
x = real;
y = img;
}
// Overloading of Binary "+" operator
public static Complex operator + (Complex c1,
Complex c2)
{
Complex c3 = new Complex();
c3.x = c1.x + c2.x;
c3.y = c1.y + c2.y;
return c3;
}
// function to display result
public void display()
{
Console.WriteLine("{0} + {1}i", x,y);
}
}
class CalNum {
// Driver Code
static void Main(string[] args)
{
Complex num1 = new Complex(2.5,3.5);
Complex num2 = new Complex(1.2,6.5);
Complex num3 = num1 + num2;
Console.Write("c1 = ");
num1.display();
Console.Write("c2 = ");
num2.display();
Console.Write("c3 = ");
num3.display();
}
}
}

출력:

C#의 다형성

이 출력은 두 개의 복소수를 더하기 위한 연산자 오버로드를 보여줍니다. 코드는 연산자 오버로딩과 함수 오버로딩을 보여줍니다.

2. 함수 오버로딩

함수는 매개변수 수, 반환 유형, 함수 반환 유형에 따라 다양한 출력을 제공할 수 있습니다. 위에서 언급한 코드는 생성자를 사용한 함수 오버로드도 다룹니다. 코드에는 2개의 생성자가 있습니다. 하나는 비어 있는 기본 생성자이고 다른 하나는 매개변수로 언급된 값으로 복소수를 초기화하는 데 사용되는 매개변수화된 생성자입니다.

그림에 표시된 예를 보면 기능은 점토를 성형하는 것이고 스트로크 방향은 점토를 성형하기 위해 제공되는 부재입니다. 획의 방향에 따라 점토는 각각 냄비, 그릇, 장난감으로 변신합니다.

코드:

using System;
using System.Collections.Generic;
public class Clay
{
// A few example members
public int Height { get; set; }
public int strokeDirection { get; set; }
// Virtual method
public virtual void Mould()
{
Console.WriteLine("Beginning to mould the clay");
}
}
class Pot : Clay
{
public override void Mould()
{
// Code to make a pot Console.WriteLine("Making a pot");
base.Mould();
}
}
class Bowl : Clay
{
public override void Mould()
{
// Code to make a bowl
Console.WriteLine("Making a bowl");
base.Mould();
}
}
class Toy : Clay
{
public override void Mould()
{
// Code to make a toy
Console.WriteLine("Making a toy");
base.Mould();
}
}
class Program
{
static void Main(string[] args)
{
// Illustrating Polymorphism #1: a Pot, Bowl and Toy
// can all be used wherever Clay is expected. No cast is
// needed because an implicit conversion exists from a derived
// class to its base class.
var items = new List<Clay>
{
new Pot(),
new Bowl(),
new Toy()
};
// Polymorphism at work #2: the virtual method Mould is
// invoked on each of the derived classes, not the base class.
foreach (var item in items)
{
item.Mould();
}
}
}

출력:

C#의 다형성

코드에서 언급했듯이 Clay 클래스는 하위 클래스가 냄비, 장난감, 그릇 클래스인 상위 클래스입니다. 'Mould' 메소드는 동일한 함수 시그니처를 사용하여 상위 클래스와 하위 클래스에 정의됩니다. 따라서 자식 클래스의 개체가 생성되고 Mould 메서드를 호출하면 기본 클래스 메서드가 자식 클래스 메서드로 재정의됩니다. 따라서 하위 클래스 메서드의 출력이 표시됩니다. 위 코드는 다형성을 설명하기 위해 오버로딩이 아닌 메소드 오버라이딩을 보여줍니다.

C#의 다형성에 대한 주의 사항

C#의 다형성에 대해 염두에 두어야 할 사항:

  • 오버로딩은 재정의와 다릅니다. 오버로딩에는 다른 함수 서명이 있지만 재정의에는 동일한 함수 서명이 있습니다.
  • 다형성은 하위 클래스에서 상위 클래스의 동작을 변경하는 것을 의미합니다.
  • 상속이란 상위 클래스의 구조와 동작을 하위 클래스에서 사용하는 것을 의미합니다.

다음은 몇 가지 핵심 사항입니다.

  • 다형성은 객체지향 프로그래밍의 주요 패러다임 중 하나입니다.
  • 함수 오버로드는 상속된 클래스에 있는 함수의 반환 유형과 매개변수에 따라 함수를 수정합니다.
  • 연산자 오버로드는 주어진 매개변수에 따라 연산자 정의를 수정합니다.
  • 다형성은 상속을 구현하는 데 사용됩니다. 런타임 시 메서드 재정의를 사용하여 하위 클래스 메서드를 호출하기로 결정합니다.

위 내용은 C#의 다형성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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