C#에서 다중상속이 안되는 이유를 말해보라고 하면 다들 알지만, 선뜻 이런 이유에서 안된다 라고 바로 생각이 안나는 경우가 있다.
왜 안되는지 하나씩 짚어보자
다중 상속이란, 둘 이상의 클래스를 동시에 상속하는 것을 말한다.
이를 지원하는 언어로는 C++이 있지만 이 다중상속에는 많은 문제가 있다.
(C++에서도 다중상속을 지원하지만 상호참조라는 문제가 있다)
1. 메서드 충돌 : 서로 다른 부모 클래스로부터 상속받은 메서드 이름이 같다면, 어떤 메서드를 호출해야 하는지에 대한 모호한 부분이 발생한다
public class ClassA
{
public virtual void Function()
{
}
}
public class ClassB
{
public virtual void Function()
{
}
}
위처럼 ClassA, ClassB에서 동일한 이름의 Function 메서드가 존재할 때
public class ClassC : ClassA, ClassB
{
public override void Function()
{
base.Function();
}
}
위 2개의 클래스를 상속받는 ClassC가 Function 함수를 재정의하면 이 Function함수는 어떤 부모 클래스의 메서드인가 라는 문제가 있다.
2. 다이아몬드 형태
public class ClassA
{
}
public class ClassB : ClassA
{
}
public class ClassC : ClassA
{
}
ClassA를 상속받는 ClassB와 ClassC가 있다
public class ClassD : ClassB, ClassC
{
}
ClassB와 ClassC를 다중상속 받는 ClassD가 있다면
위 그림같은 다이아몬드 같은 구조가 만들어지게된다.
이 경우에도 충돌과 모호성이 발생할 수 있다.
위처럼 '모호성' 이라는 이유로 인해 C#에서는 다중상속을 지원하지 않는다.
'프로그래밍 > C#' 카테고리의 다른 글
Struct와 Class의 차이 (0) | 2023.08.03 |
---|---|
Partial Class를 사용하는 이유 (0) | 2023.08.01 |
Static 클래스 (0) | 2023.07.31 |
C# Array, List, ArrayList 차이 (0) | 2023.04.23 |
C# String과 StringBuilder (0) | 2023.04.15 |