C#

(C#) 추상 클래스(abstract class) 예제

코딩ABC 2023. 7. 27. 10:36
반응형

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#) 추상 클래스(abstract class) 예제

 

반응형