2010-03-03 1 views
6

저는 C# 프로그래머입니다. 그러나 저는 VB.Net 코드로 작업해야하는데 두 메서드가있는 상황을 발견했습니다. 동일한 이름이지만 다른 메소드 매개 변수를 가진 인터페이스. 클래스에서이 인터페이스를 구현하려고하면 VB.Net에서 메서드 서명 뒤에 "Implements MethodName"을 명시 적으로 선언해야합니다. 두 메소드 이름이 모두 동일하기 때문에 컴파일러를 혼란스럽게합니다. 이런 종류의 문제를 해결할 수있는 방법이 있습니까? 나는 이것이 반드시 공통적 인 것으로 의심된다. 이견있는 사람?두 메서드는 같은 이름이지만 다른 매개 변수가있을 때 VB.Net에서 인터페이스를 구현하는 방법

N.B. 이것은 프로그래머가 문제의 인터페이스가 그 아래에서 변경되지 않았 음을 확인하지 않은 경우입니다.

답변

9

어떻게 컴파일러를 혼란스럽게합니까? 컴파일러는 모든 메서드 서명에 대한 구현을 찾고 해당 구현을 해당 서명과 구별합니다.

시그니처가 동일하거나 구분할 수없는 경우 (대부분의 경우 동일한 순서로 동일한 유형의 인수가 있음을 의미 함) 인터페이스와 관련된 디자인 타임 오류가 발생하여 두 가지 방법으로는 동일한 서명을 가지고 있기 때문에 서로에게 과부하가 걸립니다.

따라서 어쨌든 컴파일러를 혼동해서는 안됩니다. 추가 지원이 필요한 경우 코드 샘플을 첨부하십시오. 이러한 사항은 비교적 쉽게 해결할 수 있습니다.

팁 : 구현을 작성할 때 "implements MyInterface"를 적어 입력하고 Enter 키를 누르면 Visual Studio에서 구현의 "skeleton"코드를 생성하여 메서드 서명을 작성하고 인터페이스 이름이 같은 두 가지 방법을 갖고 everythign 잘 작동의

예제 코드 :

Interface MyInterface 
    Sub MySub(ByVal arg0 As DateTime) 
    Sub MySub(ByVal arg0 As ULong) 
End Interface 

Class MyImplementation 
    Implements MyInterface 

    Public Sub MySub(ByVal arg0 As Date) Implements MyInterface.MySub 
     ... 
    End Sub 

    Public Sub MySub(ByVal arg0 As ULong) Implements MyInterface.MySub 
     ... 
    End Sub 
End Class 
1

당신은 방법을 비공개로하고 그것을 다른 이름을 부여 할 수 있습니다.

처럼 :

Private Sub SaveImpl(ByVal someEntity As IEntity) Implements IRepository.Save 

이 같은 외부에 보이는 것 : someRepository.Save는

+0

이 기술은 단순히 방법은 객체 인 경우에만 사용할 수 있도록 즉, 명시 적으로 인터페이스를 구현하기위한 유용 인터페이스 유형으로 취급되며, 달리 표시되지 않습니다. C#의 명시 적 인터페이스 구현과 유사합니다. –