개체 형식 확인(Visual Basic)
Object
로 선언한 변수인 제네릭 개체 변수는 클래스와 상관 없이 개체를 가지고 있을 수 있습니다. Object
형식의 변수를 사용하는 경우, 해당 개체의 클래스에 따라 각기 다른 작업이 필요할 수도 있습니다. 가령, 어떤 개체는 특정 속성이나 메서드를 지원하지 않을 수도 있습니다. Visual Basic은 TypeName
함수와 TypeOf...Is
연산자라는 두 가지 수단을 통해 개체 변수에 저장된 개체 형식을 확인할 수 있게 해 줍니다.
TypeName과 TypeOf…Is
TypeName
함수는 문자열을 반환하며, 다음의 코드 조각에서와 같이 어떤 개체의 클래스 이름을 저장하거나 표시해야 할 때 가장 적합합니다.
Dim Ctrl As Control = New TextBox
MsgBox(TypeName(Ctrl))
TypeOf...Is
연산자는 TypeName
을 사용하는 동일 문자열 비교보다 훨씬 빠르기 때문에 개체 형식을 테스트하는 데 최적화되어 있습니다. 다음의 코드 조각은 If...Then...Else
문에 TypeOf...Is
를 사용합니다.
If TypeOf Ctrl Is Button Then
MsgBox("The control is a button.")
End If
주의해야 할 점이 있습니다. TypeOf...Is
연산자는 개체가 특정 형식이거나 특정 형식에서 파생된 경우 True
를 반환합니다. Visual Basic에서 수행하는 거의 모든 작업에는 개체가 포함되어 있으며, 이러한 개체에는 문자열이나 정수처럼 일반적으로는 개체로 생각하지 않는 요소들도 포함되어 있습니다. 이러한 개체들은 Object에서 파생되어 메서드를 상속합니다. Integer
를 전달하고 Object
로 계산되는 경우, TypeOf...Is
연산자는 True
를 반환합니다. 다음 예제에서는 InParam
매개 변수가 Object
인 동시에 Integer
라고 합니다.
Sub CheckType(ByVal InParam As Object)
' Both If statements evaluate to True when an
' Integer is passed to this procedure.
If TypeOf InParam Is Object Then
MsgBox("InParam is an Object")
End If
If TypeOf InParam Is Integer Then
MsgBox("InParam is an Integer")
End If
End Sub
다음 예제에서는 TypeOf...Is
와 TypeName
을 모두 사용하여 Ctrl
인수에 전달하는 개체의 형식을 확인합니다. TestObject
프로시저는 서로 다른 세 가지 종류의 컨트롤을 사용하여 ShowType
을 호출합니다.
예제를 실행하려면
새 Windows 애플리케이션 프로젝트를 만들고 양식에 Button 컨트롤, CheckBox 컨트롤, RadioButton 컨트롤을 하나씩 추가합니다.
양식의 단추에서
TestObject
프로시저를 호출합니다.양식에 다음 코드를 추가합니다.
Sub ShowType(ByVal Ctrl As Object) 'Use the TypeName function to display the class name as text. MsgBox(TypeName(Ctrl)) 'Use the TypeOf function to determine the object's type. If TypeOf Ctrl Is Button Then MsgBox("The control is a button.") ElseIf TypeOf Ctrl Is CheckBox Then MsgBox("The control is a check box.") Else MsgBox("The object is some other type of control.") End If End Sub Protected Sub TestObject() 'Test the ShowType procedure with three kinds of objects. ShowType(Me.Button1) ShowType(Me.CheckBox1) ShowType(Me.RadioButton1) End Sub
참고 항목
.NET