일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 깃
- 다트 언어
- HTML
- Python
- jupyter
- C# delegate
- git
- 플러터
- c# 추상 클래스
- 포인터
- Houdini
- Flutter
- c# 윈폼
- 유니티
- vim
- gitlab
- C++
- dart 언어
- c# winform
- Algorithm
- 구조체
- C언어 포인터
- Unity
- 도커
- Data Structure
- jupyter lab
- docker
- c언어
- github
- c#
Archives
- Today
- Total
nomad-programmer
[Programming/C#] 오버라이딩과 다형성 본문
객체 지향 프로그래밍에서 다형성(Polymorphism)은 객체가 여러 형태를 가질 수 있음을 의미한다.
다형성은 원래 하위 형식 다형성(Subtype Polymorphism)의 준말이다. 다시 말해, 자신으로부터 상속받아 만들어진 파생 클래스를 통해 다형성을 실현하는 것이다.
메소드를 오버라이딩하기 위해서는 한 가지 조건이 필요하다. 그 조건은 바로 오버라이딩을 할 메소드가 virtual 키워드로 한정되어 있어야 한다는 것이다.
private로 선언한 메소드는 오버라이딩할 수 없다.
private로 선언된 멤버는 어차피 파생 클래스에서 보이지도 않는다. 같은 이름, 같은 형식, 같은 매개 변수를 이용하여 선언했다 하더라도 컴파일러는 메소드를 재정의한다고 생각하지 않고 전혀 없었던 메소드를 선언했다고 간주할 것이다.
using System;
namespace CSharpExample
{
class Base
{
// 가상 함수
protected virtual string GetData()
{
Console.WriteLine("가상 함수 호출");
return "";
}
public void Print()
{
Console.WriteLine($"GetData Method - {GetData()}");
}
}
class Derived : Base
{
// override
protected override string GetData()
{
string _ = base.GetData();
return "Hello World!";
}
}
class MainApp
{
static int Main(string[] args)
{
Derived a = new Derived();
a.Print();
return 0;
}
}
}
/* 결과
가상 함수 호출
GetData Method - Hello World!
*/
'Programming > C#' 카테고리의 다른 글
[Programming/C#] 오버라이딩 봉인 (sealed) (0) | 2020.09.09 |
---|---|
[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 |
Comments