2011-07-06 3 views
1

몇 년 전 나는 진술서가 작성된 OO에 관한 코스를 가졌습니다. 나는 그 진술을 잊어 버렸고, 그것을 기억으로 되찾기위한 도움을 받고 싶다.OO 기본 질문 대리자 대 상속 vs 인터페이스

그것은 다음 중 하나 : 당신이 인터페이스로 할 수있는

  1. 모든 것이 대리자와 함께 할 수
  2. 당신이 인터페이스로 할 수있는 모든 것은 상속 할 수
  3. 상속을 통해 수행 할 수있는 모든 작업은 인터페이스를 통해 수행 할 수도 있습니다.
  4. 상속을 통해 수행 할 수있는 모든 작업은 대리인을 통해 수행 할 수도 있습니다.

나는 그 중 하나를 알고 있으며 1은 완전히 무효가 될 수밖에 없다.

이것에 대해 밝히시겠습니까?

+0

그들은 대부분 '상속에 우선하여 구성'이라는 문구를 언급했을 가능성이 큽니다. 귀하의 경우, 그것은 문장 4가 될 것입니다. 반면에 인터페이스는 '다중 상속'문제를 아주 잘 해결하는 경향이 있으며 테스트 케이스에 테스트 더미를 제공하는 강력한 도구입니다. –

+1

아마도 숙제 일 것입니다 ... –

답변

2

IAbstract에 동의합니다. 대리인은 상속 또는 인터페이스와 아무런 관련이 없으므로 진술 중 하나라도 적용되지 않습니다.

제 의견으로는 2 번이 정답입니다. 인터페이스는 구현 클래스가 포함해야하는 메서드, 속성 및 이벤트 집합을 제공합니다. 상속을 사용하면 기본적으로이 작업을 수행 할 수 있습니다. 모든 수퍼 클래스의 비공개 속성, 메서드 및 이벤트를 하위 클래스에서 사용할 수 있습니다.

상속은 구현 세부 정보 (메서드 본문)를 하위 클래스에 제공하지만 인터페이스는 그렇지 않습니다. 주어진 클래스에서 사용할 수있는 것만 제공합니다. 이것이 내가 # 3이 옳다고 생각하지 않는 이유입니다.

+0

좋아, 따라와 - 이해가가. 이것이 내가 이런 방식으로 작성된 시험 문제를 좋아하지 않는 이유입니다. – IAbstract

1

첫째, 대표 정말 상속 또는 인터페이스와는 아무 상관이없는 - 그래서, 모두 1, 4

두 번째를 배제 것 인 interface 다음 중 하나라고 생각 :

abstract class SomeInterface { 
/*.. do stuff ..*/ 
} 

... 또는 유용하기 위해

interface ISomeInterface { 
/*.. do stuff ..*/ 
} 

는, 이것들은 계층 구조 아래 어딘가에 구체적인 클래스에서 상속해야합니다. 종종 유형을 파생 할 때 파생되는 인터페이스를 선택할 수 있습니다. 이런 식으로 표현 된 문장을 들어 보지 못했지만 객관식 시험 문제에서 주어진다면 # 3을 선택합니다.

+0

나는'.Net'에서 사용 된'Delegates'가 아니라'interface delegation'을 언급했다고 가정합니다. http://en.wikipedia.org/wiki/Delegation_pattern –

0

내가 응답 할 수있는 C#으로 질문에 태그를 추가했습니다. 그러나 대리자, 상속 및 인터페이스가 구현되는 방식은 언어 간 중요한 차이가있을 수 있으므로 OO에 대한 유용한 추상적 진술이 얼마나 중요한지 잘 모르겠습니다.

"대리인이 해결할 수있는 문제는 인터페이스를 사용하여 해결할 수도 있습니다." 간단히 말해서

MSDN programming guide interface vs delegate

에서 # 4.0 -C 당신은 확실히 인터페이스를 통해 상속 할 수있는 모든 것을 할 수 있지만 중복 코드를 많이 발생할 수 있습니다. 그러므로 C#이 부족한 경우에는 다중 상속을 대체 할 수 없습니다.

어셈블러에서 할 수있는 고수준 언어로 수행 할 수있는 모든 작업이 있지만 생산성에 관심이 있다면 실용적이지 않을 수도 있습니다.