Programming/C#
[Programming/C#] 추상 클래스
scii
2020. 9. 9. 02:29
C#은 C++의 순수 가상 함수같은 말이 없다. 허나 순수 가상 함수와 같은 기능을 하는 것을 만들 수 있다. 그것은 추상 클래스를 정의하고 abstract 키워드를 사용하는 것이다.
추상 클래스와 가상 함수의 차이점
가상 함수는 재정의를 하지 않아도 컴파일 에러가 발생하지 않는다. 또한 부모 클래스에서 가상 함수는 {} 괄호가 있어야 한다. 즉, 함수 같은 구조여야 한다.
public virtual string GetData()
{
return "";
}
추상 클래스의 추상화 함수는 재정의를 하지 않으면 컴파일 에러가 발생한다. 그리고 부모 클래스에서 {} 괄호는 필요치 않다. 선언만 존재하면 된다.
public abstract string GetData();
추상 클래스는 독자적으로 인스턴스를 생성할 수 없다. 그리고 추상 클래스를 상속 받는 파생 클래스는 추상 클래스에 정의되어 있는 추상 함수들을 모두 재정의(override) 해야 한다.
추상 클래스의 예제
using System;
namespace CSharpExample
{
// 추상 클래스
abstract class Abstract
{
// c++로 굳이 따지자면, 순수 가상 함수이다.
// GetData함수는 여기서 정의하지 않고 상속받는 파생 클래스에서 강제 재정의를 명령한다.
protected abstract string GetData();
public void Print()
{
Console.WriteLine($"GetData Method - {GetData()}");
}
}
class Base : Abstract
{
// 추상 클래스를 상속하였기에
protected override string GetData()
{
return "Hello World!";
}
}
class MainApp
{
static int Main(string[] args)
{
Base b = new Base();
b.Print();
return 0;
}
}
}
/* 결과
GetData Method - Hello World!
*/