C#에서는 C++과 다르게 명시적으로 인터페이스와 추상클래스가 존재한다.
C++의 경우에는 인터페이스를 순수가상함수로 구현을 하고, 이 순수가상함수를 하나 이상가지는 클래스는 그 자체로 인스턴스를 생성할 수 없는 추상클래스가 된다
C#에서는 명시적으로 Interface라는 키워드가 존재하고, Abstract 키워드가 존재하여 인터페이스와 추상클래스를 구현 할 수 있다.
인터페이스 (Interface)
- 인터페이스는 규약이다 (인터페이스를 상속받는 클래스는 무조건 인터페이스를 구현해야한다)
- 선언만 존재하고 구현은 없다.
- C#에서는 C++ 처럼 다중상속을 허용하지 않지만 인터페이스는 다중상속이 가능하다.
- 인터페이스의 모든 멤버은 public 이다.
- 속성 , 메서드, 이벤트와 대리자를 멤버로 가질 수 있다.
추상 클래스 (Abstract Class)
- 인터페이스와 다르게 메서드의 시그니처만 존재하는 게 아니라, 실제로 구현된 메서드도 포함될 수 있다.
- 단일 상속만 가능하다.
- 각 멤버는 public, private, protected 등의 액세스 한정자를 가질 수 있다.
- 필드, 속성, 생성자, 소멸자, 메서드, 이벤트, 인덱서 등을 가질 수 있다.