2013-06-16 2 views
0

나는 기본 추상 클래스에서 클래스를 파생합니다. 내 추상 클래스에는 네 가지 추상 메서드가 있습니다. 파생 클래스의 모든 메서드를 재정의하고 싶지 않습니다. 파생 클래스를 추상 클래스로 선언하지 않고 어떻게해야합니까?파생 클래스를 추상 클래스로 만들지 않고 파생 클래스의 추상 클래스 메서드 중 하나를 건너 뜁니다.

+0

왜이 작업을 수행 하시겠습니까? 추상적 인 방법에 대한 전체적인 생각은 당신이 그것을 무시할 수 있어야한다는 것입니다. –

+0

대부분 파생 클래스에서 가상 메서드를 재정의하려는 경우 – OzrenTkalcecKrznaric

+1

프로젝트 아키텍처에 대한 기본 클래스를 만드는 경우이 문제가 내 마음에 듭니다. 이것이 불가능하다는 것을 알고 있지만 트릭이나 다른 것이 있다고 생각합니다. 이것을 달성하십시오. – Vishwajeet

답변

2

추상 클래스 해야에서 파생 된 비 추상 클래스 당신은 그렇게하지 못할 상속 된 모든 추상 메소드 및 접근 자 (MSDN)

1

의 실제 구현을 포함한다. 을 우회하면이를 구현하지 말아야합니다. 이는 파생 클래스가 완전히 구성되지 않았 음을 의미합니다. 그런 유형의 인스턴스를 어떻게 인스턴스화 할 수 있습니까? 이러한 유형은 실제로 인스턴스화 할 수 없으며 추상화라고해야합니다.

그러나 런타임 중에 파생 클래스에서 이러한 무시할 수있는 메서드를 무시할 수있는 방법이 있습니다. 당신은 가상 수 있도록 할 수의 (오버라이드 (런타임에 예외를 던져)

abstract class Vehicle 
{ 
    public abstract void Do(); 
} 

class Car : Vehicle 
{ 
    public virtual void Do(){ throw InvalidOperationException(); } 
} 

class Hyundai : Car 
{ 
    public override void Do(){ //implementation } 
} 

은 아마도 대안이 기본 클래스 인터페이스를하고 명시 적으로 파생 클래스에서이를 구현하는 것입니다을 위해 더 파생 클래스에 대한 의미있는 어느 정도 그것을 숨길 것이다).

interface Vehicle 
{ 
    void Do(); 
} 

class Car : Vehicle 
{ 
    void Vehicle.Do() 
    { 
     throw new InvalidOperationException(); 
    } 
} 

class Hyundai : Car 
{ 
    //Do is not available here unless you cast it to base type, ie Vehicle 
} 
+2

이 목적으로'NotImplementedException'을 사용하지 마십시오. 표현하고자하는 의도가 "연산이 유효하지 않다"면, InvalidOperationException을 사용하십시오. 개발 중에 ** 개발이 완료되었지만 아직 완료되지 않은 코드의 표식으로 개발 중에 'NotImplementedException'을 사용하고 배송하기 전에 모두 제거하십시오. 'NotImplementedException'을 사용하여 "의도적으로 구현되지 않았습니다"와 "이것이 구현되도록 설계되었습니다"를 모두 의미하는 경우, 혼란스러운 버그에 대비해야합니다. –

+0

@EricLippert 공정한 포인트, 감사합니다. 그것을 업데이트합니다. – nawfal

관련 문제