2011-08-31 4 views
0

나는 다음과 같은 시나리오를했습니다추상 클래스, 인터페이스, 컨테이너와 문제 및 방법

나는 인터페이스를했습니다

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); 
    }      
} 

는 다른 솔루션이 나보다 더 나은 있나요입니까?

감사합니다.

+1

왜 이것이 문제라고 생각하십니까? 인터페이스를 사용하는 코드에서 메서드가 필요한 경우에는 인터페이스의 일부 여야합니다. – Jason

+1

당신이 인터페이스로 작업하고 있다면 분명히 메서드를 선언해야합니다. – dlev

+0

인터페이스를 버리고 추상 클래스를 사용하십시오. – Will

답변

3

우선, 귀하의 명명 규칙은 엉망입니다. Microsoft가 작성한 guidelines을 읽어보십시오.

예제를 기반으로 달성하려는 목표를 말하기가 어렵습니다.

위로 질문 :

에만 해당 인터페이스와 함께 작동하는 인터페이스에 액세스해야합니다. 함께 작동하도록 클래스/인터페이스로 어떤 마법 물건을 만들려고하지 마십시오. 이는 대개 클래스가 인터페이스를 구현하려고 시도해서는 안된다는 것을 의미합니다.

원하는 기능을 갖춘 새 인터페이스를 만들고 클래스에서 모두 구현하는 것이 좋습니다.

+0

예를 들어, 가능한 한 간단하게 작성하려고했습니다. 고맙다. 나는 당신이 제안한대로 새로운 인터페이스를 만들 것이다. – Faber

관련 문제