일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Houdini
- 포인터
- gitlab
- C++
- c# 윈폼
- vim
- 도커
- Algorithm
- 플러터
- 깃
- C언어 포인터
- c언어
- jupyter lab
- c#
- git
- 구조체
- HTML
- Unity
- dart 언어
- jupyter
- c# winform
- Flutter
- Data Structure
- docker
- 유니티
- C# delegate
- 다트 언어
- Python
- c# 추상 클래스
- github
Archives
- Today
- Total
nomad-programmer
[Programming/C#] 추상 클래스 본문
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!
*/
'Programming > C#' 카테고리의 다른 글
[Programming/C#] 메소드 숨기기 (0) | 2020.09.09 |
---|---|
[Programming/C#] 오버라이딩과 다형성 (0) | 2020.09.09 |
[Programming/C#] 부모 클래스와 파생 클래스 사이의 형식 변환 (is, as) (0) | 2020.09.08 |
[Programming/C#] 상속 : base, base() (0) | 2020.09.08 |
[Programming/C#] 접근 한정자로 공개 수준 결정 (0) | 2020.09.08 |
Comments