다음을 통해 공유


오버로드된 속성 및 메서드(Visual Basic)

오버로드는 이름은 동일하지만 인수 형식이 다른 클래스에서 둘 이상의 프로시저, 인스턴스 생성자 또는 속성을 만드는 것입니다.

사용량 오버로드

오버로드는 개체 모델에서 다양한 데이터 형식에 대해 작동하는 프로시저에 대해 동일한 이름을 사용하도록 지정할 때 특히 유용합니다. 예를 들어, 여러 가지 다른 데이터 형식을 표시할 수 있는 클래스에는 다음과 같은 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 키워드를 생략하면 오버로드를 이름으로 섀도잉이라고 합니다. 이름으로 섀도잉은 멤버의 상속된 구현을 바꾸고 파생 클래스 및 해당 종속 항목의 인스턴스에서 다른 모든 오버로드를 사용할 수 없게 만듭니다.

OverloadsShadows 한정자는 동일한 속성 또는 메서드와 함께 사용할 수 없습니다.

예시

다음 예에서는 달러 금액의 String 또는 Decimal 표현을 허용하고 판매세가 포함된 문자열을 반환하는 오버로드된 메서드를 만듭니다.

이 예를 사용하여 오버로드된 메서드를 만들려면

  1. 새 프로젝트를 열고 TaxClass라는 클래스를 추가합니다.

  2. 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
    
  3. 양식에 다음 프로시저를 추가합니다.

    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
    
  4. 양식에 단추를 추가하고 단추의 Button1_Click 이벤트에서 ShowTax 프로시저를 호출합니다.

  5. 프로젝트를 실행하고 양식의 단추를 클릭하여 오버로드된 ShowTax 프로시저를 테스트합니다.

런타임 시 컴파일러는 사용 중인 매개 변수와 일치하는 적절한 오버로드된 함수를 선택합니다. 단추를 클릭하면 문자열인 Price 매개 변수와 "Price is a String."이라는 메시지와 함께 오버로드된 메서드가 먼저 호출됩니다. 세금은 $5.12입니다"가 표시됩니다. TaxAmount는 두 번째로 Decimal 값과 함께 호출되며 "Price is a Decimal."이라는 메시지가 표시됩니다. 세금은 $5.12입니다"가 표시됩니다.

참고 항목