오버로딩은 이름이 같지만 인수 형식이 다른 클래스에서 둘 이상의 프로시저, 인스턴스 생성자 또는 속성을 만드는 것입니다.
사용량 초과
오버로딩은 개체 모델이 서로 다른 데이터 형식에서 작동하는 프로시저에 동일한 이름을 사용한다고 지시할 때 특히 유용합니다. 예를 들어 여러 다른 데이터 형식을 표시할 수 있는 클래스에는 다음과 같은 프로시저가 있을 Display
수 있습니다.
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
오버로드하지 않으면 다음과 같이 동일한 작업을 수행하더라도 각 프로시저에 대해 고유한 이름을 만들어야 합니다.
Sub DisplayChar(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
오버로드를 사용하면 사용할 수 있는 데이터 형식을 선택할 수 있으므로 속성이나 메서드를 더 쉽게 사용할 수 있습니다. 예를 들어 앞에서 설명한 오버로드된 Display
메서드는 다음 코드 줄 중 한 줄로 호출할 수 있습니다.
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)
런타임에 Visual Basic은 지정한 매개 변수의 데이터 형식에 따라 올바른 프로시저를 호출합니다.
규칙 오버로드
이름이 같은 두 개 이상의 속성 또는 메서드를 추가하여 클래스에 대해 오버로드된 멤버를 만듭니다. 오버로드된 파생 멤버를 제외하고 오버로드된 각 멤버에는 서로 다른 매개 변수 목록이 있어야 하며 속성 또는 프로시저를 오버로드할 때 다음 항목을 차별화 기능으로 사용할 수 없습니다.
멤버 또는 멤버의 매개 변수에 적용되는 한정자(예:
ByVal
또는ByRef
)입니다.매개 변수 이름
프로시저의 반환 형식
오버로드할 때 키워드는 Overloads
선택 사항이지만 오버로드된 멤버가 키워드를 사용하는 Overloads
경우 이름이 같은 다른 모든 오버로드된 멤버도 이 키워드를 지정해야 합니다.
파생 클래스는 동일한 매개 변수 및 매개 변수 형식이 있는 멤버를 사용하여 상속된 멤버를 오버로드할 수 있습니다. 이를 이름 및 서명으로 섀도닝이라고 하는 프로세스입니다.
Overloads
이름 및 서명으로 섀도링할 때 키워드를 사용하는 경우 파생 클래스의 멤버 구현이 기본 클래스의 구현 대신 사용되고 해당 멤버에 대한 다른 모든 오버로드를 파생 클래스의 인스턴스에서 사용할 수 있습니다.
Overloads
매개 변수와 매개 변수 형식이 동일한 멤버로 상속된 멤버를 오버로드할 경우, 키워드를 생략하면 이 오버로드를 이름으로 섀도링이라고 합니다. 이름으로 가리기를 사용하면, 멤버의 상속된 구현이 대체되고, 파생 클래스 및 그 후손 클래스의 인스턴스에서는 다른 모든 오버로드를 사용할 수 없게 됩니다.
Overloads
및 Shadows
수식어는 동일한 속성 또는 메서드에 모두 사용할 수 없습니다.
예시
다음 예제에서는 달러 금액의 `String
` 또는 `Decimal
` 표현을 수락하고 판매세가 포함된 문자열을 반환하는 오버로드된 메서드를 만듭니다.
이 예제를 사용하여 오버로드된 메서드를 만들려면
새 프로젝트를 열고 이름이 인
TaxClass
클래스를 추가합니다.클래스에 다음 코드를 추가합니다
TaxClass
.Public Class TaxClass Overloads Function TaxAmount(ByVal decPrice As Decimal, ByVal TaxRate As Single) As String TaxAmount = "Price is a Decimal. Tax is $" & (CStr(decPrice * TaxRate)) End Function Overloads Function TaxAmount(ByVal strPrice As String, ByVal TaxRate As Single) As String TaxAmount = "Price is a String. Tax is $" & CStr((CDec(strPrice) * TaxRate)) End Function End Class
양식에 다음 절차를 추가합니다.
Sub ShowTax() ' 8% tax rate. Const TaxRate As Single = 0.08 ' $64.00 Purchase as a String. Dim strPrice As String = "64.00" ' $64.00 Purchase as a Decimal. Dim decPrice As Decimal = 64 Dim aclass As New TaxClass 'Call the same method with two different kinds of data. MsgBox(aclass.TaxAmount(strPrice, TaxRate)) MsgBox(aclass.TaxAmount(decPrice, TaxRate)) End Sub
폼에 버튼을 추가하고 버튼의 이벤트에서
ShowTax
프로시저를Button1_Click
호출합니다.프로젝트를 실행하고 폼의 단추를 클릭하여 오버로드된
ShowTax
프로시저를 테스트합니다.
런타임에 컴파일러는 사용 중인 매개 변수와 일치하는 적절한 오버로드된 함수를 선택합니다. 단추를 클릭하면 먼저 문자열인 매개 변수와 함께 메서드가 호출되며, 메시지는 "Price는 문자열입니다."입니다. 세금은 $5.12"가 표시됩니다.
TaxAmount
는 두 번째로 Decimal
값을 사용하여 호출되며, 메시지로 "가격은 10진수입니다." 호출됩니다. 세금은 $5.12"가 표시됩니다.
참고하십시오
.NET