2011-01-30 4 views
0

확장 메서드가 포함 된 네임 스페이스를 참조하여 클래스에 코드를 삽입하여 일부 인터페이스의 기본 클래스 구현을 시뮬레이션 할 수 있습니까? 아니면 이것이 가능하지 않더라도 나쁜 관행으로 간주됩니까?확장 메소드를 사용하여 클래스에 'Inject'구현을 구현하여 인터페이스를 구현 하시겠습니까?

Imports MyApp.Extensions 

Class SomeClass : Inherits System.SomeBaseClass : Implements MyApp.IAppInterface 

End Class 

Public Interface IAppInterface 
    Sub InterfaceMethod() 
End Interface 


Namespace MyApp.Extensions 
    Public Module SomeClassExtensions 
     Public Sub InterfaceMethod(ByVal someClass as MyApp.SomeClass) 
      //Implementation 
     End Sub 
    End Module 
End Namespace 
+0

아니요, 불가능합니다. – Josh

답변

1

문제는 방법 SomeClassExtensions.InterfaceMethod 구현을 수행 할 것입니까? 즉 어떤 속성/메소드가 IAppInterface에 정의되어 확장 메소드에서 구현할 수있는 충분한 데이터/동작이 있습니까? 인터페이스 은 의미가 있기 위해에 특정 "기본"메소드 세트가 있어야한다는 것을 알게 될 것입니다.

그 외에도 사람들은 종종 메서드를 인터페이스에 정의하여 호출자에게 더 편리하게 만듭니다.이 메서드는 실제로 "기본"인터페이스 메서드 집합의 구성 요소입니다. 이러한 편리한 메소드는 인터페이스에서 으로 제거되고 확장 메소드를 통해 전체적으로 정의 된 우수한 후보입니다. 이것은 인터페이스의 구현 자들이 이러한 편리한 메소드 (구현과 상관없이 보통 같은 방식으로 코딩되는 편리 메소드)를 구현하지 않아도되고 호출자가 호출 할 수있는 이점을 누릴 수있게 해줍니다.

+0

이것은 실제로 비 상황입니까? – Ropstah

+0

귀하의 질문과 관련하여 말하자면 인터페이스에서 확장 메서드로 구현하려는 메서드를 단순히 제거하십시오. 실제로 * 문자 그대로 * 확장 메소드를 통해 인터페이스 메소드를 구현할 수는 없습니다. –

+0

기술적으로는 괜찮지 만 개념적으로? – Ropstah

0

나는 확장 방법이 무엇인지 오해하고 있다고 생각합니다. Here은 확장 방법과 관련된 디자인 패턴에 대한 질문입니다. 확장 메소드의 온톨로지는 일반적인 "is a"관계보다는 객체에 액션을 "attach"하는 것입니다. 확장 메소드가 첨부되는 객체는 추상화되어 있지 않으므로 (이미 인스턴스화했기 때문에) 인터페이스 메소드를 구현할 수 없으므로 컴파일 오류가 발생할 수 있습니다.

관련 문제