내가 일하며 알게 된 프로그래밍
article thumbnail
Published 2023. 8. 1. 00:01
C#과 다중 상속 프로그래밍/C#

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
profile

내가 일하며 알게 된 프로그래밍

@CtrlVGames