그린티라떼
개발공간
그린티라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • unity (6)
      • 개발 (4)
      • iTween (0)
      • error (2)
    • 게임서버 (5)
    • C++ (7)
      • 문법 (5)
      • 알고리즘 (2)
    • C# (5)
    • CS지식 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • C++
  • Dynamic
  • 형식매개변수의 제약
  • Delegate
  • unity
  • Gradle build failed
  • delegate chain
  • property
  • 유니티 빌드 에러
  • 컨테이너
  • 일반화컬렉션
  • 유니티
  • 일반화
  • interface
  • 함수 호출 오버헤드
  • var
  • 정규 표현식
  • 제네릭
  • 데이터타입
  • c#
  • cs지식
  • Functions
  • Container
  • inline 함수
  • regex
  • cout 스트림 버퍼
  • 함수호출
  • 다중상속의 문제점
  • 메모리영역
  • object

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
그린티라떼
C#

C#) interface 인터페이스

C#

C#) interface 인터페이스

2022. 1. 13. 22:20
    abstract class Monster
    {
        public abstract void Shout();
    }

    class Orc : Monster
    {
        public override void Shout()
        {
            Console.WriteLine("orc orc!");
        }
    }
    class Skeleton : Monster
    {
        public override void Shout()
        {
            Console.WriteLine("kele kele!");
        }
    }

추상 클래스 Monster안에 추상 메서드 Shout()를 만들고

추상 클래스 Monster를 상속 받는 Orc 와 Skeleton이 있다. 

 

class SkeletonOrc : Orc, Skeleton
{
}

끔찍한 혼종 SkeletonOrc를 만들려고 한다. 그러려면 Orc와 Skeleton을 같이 상속받아야 하는데 C#에서는 다중 상속을 지원하지 않아 오류가 생긴다. (C++에서는 지원하고 있다.)

다중 상속의 문제점 : SkeletonOrc와 같은 경우 Shout() override시 Orc의 Shout()를 사용할 것 인지, Skeleton의 Shout()를 사용할 

                               것인지 문제가 생긴다. ( 죽음의 다이아몬드)

 

위 문제점을 해결하기 위해서  interface를 사용해야 한다.

interface IFlyable
{
    void Fly();
}
class FlyableOrc : Orc, IFlyable
{
    public void Fly()
    {
        Console.WriteLine("I can fly!");
    }
}


FlyableOrc orc = new FlyableOrc();
orc.Fly();
orc.Shout();

FlyableOrc객체인 orc는 Fly()와 Shout()를 사용할 수 있다.

 

void DoFly(IFlyable flyable)
{
    flyable.Fly();
}

FlyableOrc orc = new FlyableOrc();
DoFly(orc);

IFlyable가 있는 객체만 DoFly()를 사용할 수 있게 할 수도 있다. 

'C#' 카테고리의 다른 글

C#) delegate 대리자  (0) 2022.01.14
C#) property  (0) 2022.01.13
C#) Generic 일반화  (0) 2022.01.13
C#) var & dynamic & object  (0) 2022.01.13
    'C#' 카테고리의 다른 글
    • C#) delegate 대리자
    • C#) property
    • C#) Generic 일반화
    • C#) var & dynamic & object
    그린티라떼
    그린티라떼

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.