C#에서는 클래스 단일 상속만 가능하다. 클래스 내에서 private으로 선언된 멤버는 상속 받은 클래스에서도 접근할 수 없기 때문에 상속할 멤버는 public이나 protected로 선언해야 한다. 재정의가 필요한 메서드는 virtual이나 abstract 키워드를 사용한다.
클래스 A를 상속 받은 클래스 B와 C를 클래스 D가 다중 상속 받을 때 다이아몬드 문제가 발생한다. D에서는 B가 상속받은 A와 C가 상속받은 A가 같은 A가 아니기 때문에 D에서 A로부터 상속 받은 멤버에 접근할 때 B와 C 둘 중 어느 클래스의 멤버를 호출할 지 모호해진다.
C#에서는 다중 상속을 지원하지 않고 단일 상속만 가능하기 때문에 다이아몬드 문제를 방지할 수 있다. 인터페이스를 통해 다중 상속과 유사한 효과를 얻을 수 있다.
다이아몬드 문제 : 다중 상속에서 발생할 수 있는 문제. 최상위 클래스에서 시작하여 두 개의 서브 클래스로 분기되고, 이 두 서브 클래스를 다시 하나의 클래스가 상속받는 다이아몬드의 구조로 다중 상속을 받았을 때 발생. 호출의 모호함이 발생