나는 다음과 같은 시나리오를했습니다추상 클래스, 인터페이스, 컨테이너와 문제 및 방법
나는 인터페이스를했습니다
public interface ImyInterface
{
void myInterfaceMethod(string param);
}
나는
public abstract class myAbstractClass
{
public myAbstractClass()
{
//something valid for each inherited class
}
public void myAbstractMethod<T>(T param)
{
//something with T param
}
}
내가 '추상 클래스를했습니다 myAbstractClass를 상속 받고 ImyInterface를 구현하는 클래스
public class myClass : myAbstractClass, ImyInterface
{
public myClass():base()
{}
public void ThisMethodWillNeverCall()
{
// nothing to do
}
}
그리고 마지막으로 ImyInterface 객체를 만들 클래스를 만들었습니다. 이 시점에서 나는 그것이 인터페이스로 선언되지 않았기 때문에
public class myFinalClass
{
public void myFinalMethod()
{
ImyInterface myObj = _myContainer<ImyInterface>();
myObj.???
}
}
는 물론이 방법이 없다 ... myAbstractMethod 부르지 만 것입니다. 내 솔루션은 다음
public interface ImyInterface
{
void myInterfaceMethod(string param);
void myFakeMethod<T>(T param);
}
public class myClass : myAbstractClass, ImyInterface
{
public myClass():base()
{}
public void ThisMethodWillNeverCall()
{
// nothing to do
}
//--- a fake method
public void myFakeMethod<T>(T param)
{
base.myAbstractMethod<T>(param);
}
}
는 다른 솔루션이 나보다 더 나은 있나요입니까?
감사합니다.
왜 이것이 문제라고 생각하십니까? 인터페이스를 사용하는 코드에서 메서드가 필요한 경우에는 인터페이스의 일부 여야합니다. – Jason
당신이 인터페이스로 작업하고 있다면 분명히 메서드를 선언해야합니다. – dlev
인터페이스를 버리고 추상 클래스를 사용하십시오. – Will