기본 클래스가 순수한 인터페이스 클래스가 바람직하지 않다고 가정하고 아래의 두 가지 예를 사용하면 추상 또는 가상 메소드 클래스 정의를 사용하는 것이 더 좋은 방법입니까?
"추상"버전의 장점은 아마도 더 깔끔해 보이고 파생 클래스가 희망적으로 의미있는 구현을하도록 강요한다는 것입니다.
"가상"버전의 장점은 다른 버전에서 쉽게 가져올 수 있고 추상 버전에서 요구하는 것과 같은 기본 프레임 워크를 추가하지 않고도 테스트에 사용할 수 있다는 것입니다.
초록 버전 :
public abstract class AbstractVersion
{
public abstract ReturnType Method1();
public abstract ReturnType Method2();
.
.
public abstract ReturnType MethodN();
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
가상 버전 :
public class VirtualVersion
{
public virtual ReturnType Method1()
{
return ReturnType.NotImplemented;
}
public virtual ReturnType Method2()
{
return ReturnType.NotImplemented;
}
.
.
public virtual ReturnType MethodN()
{
return ReturnType.NotImplemented;
}
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
return ReturnType.NotImplemented? 진심이야? 당신이 컴파일시에 구현되지 않은 형식을 거부 할 수없는 경우, 적어도 (당신은 할 수 있습니다 추상적 인 방법을 사용) 던져 예외.