블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 00:00

abstract(C# 참조)

Programming/C# / 2010. 9. 14. 16:50

abstract 한정자는 클래스, 메서드, 속성, 인덱서 및 이벤트에 사용할 수 있습니다. 클래스 선언에 abstract 한정자를 사용하면 해당 클래스가 다른 클래스의 기본 클래스로만 사용됨을 나타냅니다. abstract로 표시된 멤버나 abstract 클래스에 포함된 멤버는 해당 abstract 클래스에서 파생되는 클래스에 의해 구현되어야 합니다.

이 예제에서 Square 클래스는 ShapesClass에서 파생되므로 Area의 구현을 제공해야 합니다.

      abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int x, y;
    // Not providing an Area method results
    // in a compile-time error.
    public override int Area()
    {
        return x * y;
    }
}

추상 클래스에 대한 자세한 내용은 추상 및 봉인 클래스와 클래스 멤버(C# 프로그래밍 가이드)를 참조하십시오.

설명

추상 클래스에는 다음과 같은 특징이 있습니다.

  • 추상 클래스는 인스턴스화할 수 없습니다.

  • 추상 클래스에는 추상 메서드 및 접근자가 포함될 수 있습니다.

  • 추상 클래스를 sealed(C# 참조) 한정자로 한정할 수 없습니다. 즉, 이 클래스는 상속되지 않습니다.

  • 추상 클래스에서 파생된 비 추상 클래스에는 상속된 모든 추상 메서드 및 접근자의 실제 구현이 포함되어야 합니다.

메서드 또는 속성 선언에 abstract 한정자를 사용하면 해당 메서드 또는 속성에 구현이 포함되지 않음을 나타냅니다.

추상 메서드에는 다음과 같은 특징이 있습니다.

  • 추상 메서드는 암시적으로 가상 메서드입니다.

  • 추상 메서드 선언은 추상 클래스에서만 허용됩니다.

  • 추상 메서드 선언에서는 실제 구현을 제공하지 않기 때문에 메서드 본문이 없습니다. 메서드 선언은 단순히 세미콜론으로 끝나며 시그니처 뒤에 중괄호({ })가 없습니다. 예를 들면 다음과 같습니다.

    public abstract void MyMethod();
    
  • 구현은 비추상 클래스의 멤버인 재정의 메서드 override(C# 참조)에 의해 제공됩니다.

  • 추상 메서드 선언에 static 또는 virtual 한정자를 사용하면 오류가 발생합니다.

추상 속성은 추상 메서드와 비슷하게 작동하지만 선언 및 호출 구문에 차이가 있습니다.

  • 정적 속성에는 abstract 한정자를 사용할 수 없습니다.

  • 상속된 추상 속성은 override 한정자를 사용하는 속성 선언을 포함하는 방법을 통해 파생 클래스에서 재정의될 수 있습니다.

추상 클래스는 모든 인터페이스 멤버에 대한 구현을 제공해야 합니다.

인터페이스를 구현하는 추상 클래스는 인터페이스 메서드를 추상 메서드에 매핑할 수도 있습니다. 예를 들면 다음과 같습니다.

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

다음 예제에서 DerivedClass 클래스는 추상 클래스 BaseClass에서 파생되었습니다. 이 추상 클래스에는 추상 메서드 AbstractMethod와 두 개의 추상 속성 XY가 포함되어 있습니다.

// abstract_keyword.cs
// Abstract Classes
using System;
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);
    }
}

출력

x = 111, y = 161
설명

앞의 예제에서 다음과 같은 문으로 추상 클래스를 인스턴스화하려고 하면

BaseClass bc = new BaseClass();   // Error

컴파일러에서 추상 클래스 'BaseClass'의 인스턴스를 만들 수 없다는 오류가 발생합니다.


출처 : http://msdn.microsoft.com/ko-kr/library/sf985hc5(VS.80).aspx

반응형

'Programming > C#' 카테고리의 다른 글

C#에서 다중 상속 비슷한 기능이 필요할 때..  (0) 2010.09.15
interface(C# 참조)  (0) 2010.09.14
이벤트 만들기 (초보자)  (0) 2010.09.14
STL map == C# Dictionary  (0) 2010.09.13
자동 업데이트 프로그램  (1) 2010.09.10
Posted by blueasa
, |