반응형
C#의 추상 클래스는 자체적으로 인스턴스화할 수 없지만 추상 멤버와 비추상 멤버를 모두 포함할 수 있는 클래스입니다. 추상 멤버는 구현을 제공하지 않고 선언되며 파생 클래스에서 구현되어야 합니다.
다음 코드는 C# 추상 클래스의 예입니다.
이 예제에서는 Shape라는 추상 클래스를 정의합니다. 구현 없이 선언된 하나의 추상 메서드인 'CalculateArea()'가 있습니다. 또한 구현이 포함된 비추상 메서드 Display()가 있습니다.
그런 다음 Shape 추상 클래스에서 상속되는 두 개의 파생 클래스 Circle 및 Rectangle을 만듭니다. 각 파생 클래스는 기본 클래스의 추상 멤버이므로 CalculateArea() 메서드에 대한 구현을 제공해야 합니다.
추상 클래스 Shape의 인스턴스를 직접 만들 수는 없지만 파생 클래스의 인스턴스를 보유하는 참조 유형으로 사용할 수 있습니다. 추상 클래스는 구현에 약간의 유연성을 허용하면서 관련 클래스 그룹에 대한 공통 구조 및 동작을 제공하려는 경우에 유용합니다.
using System;
// Define an abstract class
public abstract class Shape
{
// Abstract method with no implementation
public abstract double CalculateArea();
// Non-abstract method with implementation
public void Display()
{
Console.WriteLine("This is a shape.");
}
}
// Derived class that implements the abstract class
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
public override double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
public override double CalculateArea()
{
return Width * Height;
}
}
Main() 메서드에서 다음과 같이 사용했습니다.
using System;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
Shape circle = new Circle(5);
circle.Display();
Console.WriteLine("Circle Area: " + circle.CalculateArea());
Shape rectangle = new Rectangle(4, 6);
rectangle.Display();
Console.WriteLine("Rectangle Area: " + rectangle.CalculateArea());
}
}
}
(Output)
반응형
'C#' 카테고리의 다른 글
(C#) 클래스 기초 예제: Person (0) | 2023.07.31 |
---|---|
(C#) 인터페이스를 이용한 다중 상속 예제: ISwim IFly Animal Bird (0) | 2023.07.29 |
(C#) 인터페이스 예제: IShape (0) | 2023.07.25 |
(C#) GDI+, 이미지 출력하기 (0) | 2023.07.18 |
(C#) 그래픽: 사각형 패턴 채우기,그림 채우기, 문자열 출력하기 (0) | 2023.06.25 |