abstract(C# 참조)abstract (C# Reference)

abstract 한정자는 수정되는 항목에 누락되거나 불완전한 구현이 있음을 나타냅니다.The abstract modifier indicates that the thing being modified has a missing or incomplete implementation. abstract 한정자는 클래스, 메서드, 속성, 인덱서 및 이벤트와 함께 사용될 수 있습니다.The abstract modifier can be used with classes, methods, properties, indexers, and events. 클래스 선언에서 abstract 한정자를 사용하여 클래스가 다른 클래스의 기본 클래스로만 사용됨을 나타냅니다.Use the abstract modifier in a class declaration to indicate that a class is intended only to be a base class of other classes. abstract로 표시되거나 추상 클래스에 포함된 멤버는 추상 클래스에서 파생 클래스에 의해 구현되어야 합니다.Members marked as abstract, or included in an abstract class, must be implemented by classes that derive from the abstract class.

Example

이 예제에서 Square 클래스는 ShapesClass에서 파생되므로 Area 구현을 제공해야 합니다.In this example, the class Square must provide an implementation of Area because it derives from ShapesClass:


abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid
    // a compile-time error.
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

다음 기능이 있는 추상 클래스:Abstract classes have the following features:

  • 추상 클래스는 인스턴스화할 수 없습니다.An abstract class cannot be instantiated.

  • 추상 클래스에 추상 메서드 및 접근자가 포함될 수 있습니다.An abstract class may contain abstract methods and accessors.

  • sealed 한정자를 사용하여 추상 클래스를 수정할 수는 없습니다. 두 한정자가 상반된 의미를 가지기 때문입니다.It is not possible to modify an abstract class with the sealed modifier because the two modifers have opposite meanings. sealed 한정자를 사용하면 클래스가 상속되지 않고 abstract 한정자를 사용하려면 클래스가 상속되어야 합니다.The sealed modifier prevents a class from being inherited and the abstract modifier requires a class to be inherited.

  • 추상 클래스에서 추상이 아닌 파생 클래스에는 모든 상속된 메서드 및 접근자의 실제 구현이 포함되어야 합니다.A non-abstract class derived from an abstract class must include actual implementations of all inherited abstract methods and accessors.

메서드 또는 속성 선언에서 abstract 한정자를 사용하여 메서드 또는 속성에 구현이 포함되지 않음을 나타냅니다.Use the abstract modifier in a method or property declaration to indicate that the method or property does not contain implementation.

추상 메서드에는 다음과 같은 기능이 있습니다.Abstract methods have the following features:

  • 추상 메서드는 암시적으로 가상 메서드입니다.An abstract method is implicitly a virtual method.

  • 추상 메서드 선언은 추상 클래스에서만 허용됩니다.Abstract method declarations are only permitted in abstract classes.

  • 추상 메서드 선언은 실제 구현을 제공하지 않으므로 메서드 본문이 없습니다. 메서드 선언은 세미콜론으로 끝나고 시그니처 뒤에 중괄호({ })가 없습니다.Because an abstract method declaration provides no actual implementation, there is no method body; the method declaration simply ends with a semicolon and there are no curly braces ({ }) following the signature. 예:For example:

    public abstract void MyMethod();  
    

    구현은 비추상 클래스의 멤버인 메서드 override에 의해 제공됩니다.The implementation is provided by a method override, which is a member of a non-abstract class.

  • 추상 메서드 선언에서 static 또는 virtual 한정자를 사용하는 것은 오류입니다.It is an error to use the static or virtual modifiers in an abstract method declaration.

선언 및 호출 구문의 차이점을 제외하고 추상 속성은 추상 메서드처럼 동작합니다.Abstract properties behave like abstract methods, except for the differences in declaration and invocation syntax.

  • 정적 속성에서 abstract 한정자를 사용하는 것은 오류입니다.It is an error to use the abstract modifier on a static property.

  • override 한정자를 사용하는 속성 선언을 포함하여 상속된 추상 속성을 파생 클래스에서 재정의할 수 있습니다.An abstract inherited property can be overridden in a derived class by including a property declaration that uses the override modifier.

추상 클래스에 대한 자세한 내용은 추상 및 봉인 클래스와 클래스 멤버를 참조하세요.For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

추상 클래스는 모든 인터페이스 멤버에 대한 구현을 제공해야 합니다.An abstract class must provide implementation for all interface members.

인터페이스를 구현하는 추상 클래스는 인터페이스 메서드를 추상 메서드에 매핑할 수 있습니다.An abstract class that implements an interface might map the interface methods onto abstract methods. 예:For example:

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

Example

이 예제에서 DerivedClass 클래스는 추상 클래스 BaseClass에서 파생됩니다.In this example, the class DerivedClass is derived from an abstract class BaseClass. 추상 클래스에는 추상 메서드 AbstractMethod 및 두 개의 추상 속성 XY가 포함됩니다.The abstract class contains an abstract method, AbstractMethod, and two abstract properties, X and Y.

abstract class BaseClass   // Abstract class
{
    protected int _x = 100;
    protected int _y = 150;
    public abstract void AbstractMethod();   // Abstract method
    public abstract int X    { get; }
    public abstract int Y    { get; }
}

class DerivedClass : BaseClass
{
    public override void AbstractMethod()
    {
        _x++;
        _y++;
    }

    public override int X   // overriding property
    {
        get
        {
            return _x + 10;
        }
    }

    public override int Y   // overriding property
    {
        get
        {
            return _y + 10;
        }
    }

    static void Main()
    {
        DerivedClass o = new DerivedClass();
        o.AbstractMethod();
        Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
    }
}
// Output: x = 111, y = 161

앞의 예제에서 다음과 같이 문을 사용하여 추상 클래스를 인스턴스화하려고 하면,In the preceding example, if you attempt to instantiate the abstract class by using a statement like this:

BaseClass bc = new BaseClass();   // Error  

컴파일러가 추상 클래스 'BaseClass'의 인스턴스를 만들 수 없다는 오류가 표시됩니다.You will get an error saying that the compiler cannot create an instance of the abstract class 'BaseClass'.

C# 언어 사양C# Language Specification

자세한 내용은 C# 언어 사양을 참조하세요.For more information, see the C# Language Specification. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.The language specification is the definitive source for C# syntax and usage.

참고 항목See Also

C# 참조C# Reference
C# 프로그래밍 가이드C# Programming Guide
한정자Modifiers
virtualvirtual
overrideoverride
C# 키워드C# Keywords