2012-07-18 5 views
0
Function GetAuthor(entityId As Integer, authorId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String 

Function GetAuthor(entityId As Integer, authorId As Integer, feedId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String 

나는 이것에 무슨 문제가 있는지 알지 못합니다. 이 오류 메시지가 나타납니다.방법은 선택적 매개 변수에 의해서만 다릅니다. 오류

'기능 GetAuthor (정수로 ENTITYID 정수, authorId [authorImageWidth 같이 정수 = 250])으로 문자열'및 '기능 GetAuthor (ENTITYID 정수 정수로 authorId 정수, feedId [정수로 authorImageWidth로서 = 250]) As String은 선택적 매개 변수에 의해서만 다르기 때문에 서로 오버로드 할 수 없습니다.

답변

3

당신이 GetAuthor를 호출하면 (int, int, int)를 컴파일러는 모두 적합 할 것 때문에이 개 방법으로 당신이 원하는 단서가 없다 (그리고이 메시지가 당신을 말하고있는 것입니다)

당신이 당신의 두 번째 방법의 선택 부분을 제거하면 GetAuthor(int, int)GetAuthor(int, int, int)은 따라서 그것의 매개 변수

당신은 구별 할 수있는 방법을 찾아야
0

에 의해 고유의 과부하를 만드는 두 번째로 GetAuthor(int, int, int, int)를 첫 번째 방법으로 해결 할 수 있기 때문에 그것은 컴파일 가능한 모든 통화 사이 :

GetAuthor(entityId, authorId) 
GetAuthor(entityId, authorId, authorImageWidth)  
GetAuthor(entityId, authorId, feedId)    
GetAuthor(entityId, authorId, feedId, authorImageWidth) 

두 번째와 세 번째 줄의 서명이 같습니다. 다른 방법으로는 함수 중 하나의 이름을 변경하거나 authorImageWidth을 다른 위치로 정의하거나 의 형식을 String 또는 Integer 이외의 형식으로 변경할 수 있습니다.

0

컴파일러가 해결할 방법을 혼동합니다.

당신은 컴파일러가 호출 할 수있는 일을 결정하는 방법을

GetAuthor(1, 1, 250) 

무엇이라고하면?

"음 ... 어쩌면 3 인자가 없기 때문에이 사람을 의미했을 수도 있습니다."

Function GetAuthor(entityId As Integer, authorId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String 

"하지만이 환자는 세 번째 매개 변수가 필요하지만 네 번째 매개 변수는 선택 사항입니다."

Function GetAuthor(entityId As Integer, authorId As Integer, feedId As Integer, Optional ByVal authorImageWidth As Integer = 250) As String 

"컴파일러처럼 혼란 스럽기 때문에 알려 드리겠습니다."

컴파일러에서 이미 말한 것처럼 ... 옵션 매개 변수에 의해서만 서로 다르기 때문에 둘 다 유효합니다.