일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jupyter
- github
- vim
- c#
- 깃
- jupyter lab
- HTML
- 플러터
- 도커
- docker
- C++
- Houdini
- c# 윈폼
- 포인터
- c언어
- Algorithm
- 유니티
- C언어 포인터
- 구조체
- 다트 언어
- c# winform
- git
- gitlab
- Data Structure
- Flutter
- c# 추상 클래스
- dart 언어
- Unity
- Python
- C# delegate
- Today
- Total
목록c# 가상 함수 (2)
nomad-programmer
객체 지향 프로그래밍에서 다형성(Polymorphism)은 객체가 여러 형태를 가질 수 있음을 의미한다. 다형성은 원래 하위 형식 다형성(Subtype Polymorphism)의 준말이다. 다시 말해, 자신으로부터 상속받아 만들어진 파생 클래스를 통해 다형성을 실현하는 것이다. 메소드를 오버라이딩하기 위해서는 한 가지 조건이 필요하다. 그 조건은 바로 오버라이딩을 할 메소드가 virtual 키워드로 한정되어 있어야 한다는 것이다. private로 선언한 메소드는 오버라이딩할 수 없다. private로 선언된 멤버는 어차피 파생 클래스에서 보이지도 않는다. 같은 이름, 같은 형식, 같은 매개 변수를 이용하여 선언했다 하더라도 컴파일러는 메소드를 재정의한다고 생각하지 않고 전혀 없었던 메소드를 선언했다고 간..
C#은 C++의 순수 가상 함수같은 말이 없다. 허나 순수 가상 함수와 같은 기능을 하는 것을 만들 수 있다. 그것은 추상 클래스를 정의하고 abstract 키워드를 사용하는 것이다. 추상 클래스와 가상 함수의 차이점 가상 함수는 재정의를 하지 않아도 컴파일 에러가 발생하지 않는다. 또한 부모 클래스에서 가상 함수는 {} 괄호가 있어야 한다. 즉, 함수 같은 구조여야 한다. public virtual string GetData() { return ""; } 추상 클래스의 추상화 함수는 재정의를 하지 않으면 컴파일 에러가 발생한다. 그리고 부모 클래스에서 {} 괄호는 필요치 않다. 선언만 존재하면 된다. public abstract string GetData(); 추상 클래스는 독자적으로 인스턴스를 생성할..