VB.NET에서 개체 유형에 대한 대/소문자 선택
이 C#이 유효한지는 모르겠지만, 당신이 이해하기를 바랍니다.:)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
VB.NET을 사용하여 개체 유형을 켜려면 어떻게 해야 합니까?Select Case
?
저는 일부 사람들이 다형성을 사용하는 것을 제안할 수도 있다는 것을 알고 있지만, 저는 작은 메시지 클래스의 계층 구조를 사용하고 있습니다. 그래서 제 경우에는 그렇게 하지 않을 것입니다.
VB 2010을 사용하면 .NET 프레임워크 4 이상을 대상으로 하는 프로젝트에 대해 다음과 같은 작업을 수행할 수 있습니다.
Select Case msg.GetType()
Case GetType(ClassA)
End Select
이전 버전의 VB에서는 동일한 두 유형을 비교할 수 없었기 때문에 작동하지 않았습니다.Is 키워드를 사용하여 동일한 참조를 가리키는지 확인해야 합니다.비교를 위해 이름 또는 전체 이름과 같은 유형의 속성을 사용하지 않는 한 케이스 선택에서 이 작업을 수행할 수 없습니다. Michael이 제안한 것처럼 말입니다.If와 ElseIf의 조합을 사용할 수 있습니다.
Dim type = msg.GetType()
If type Is GetType(ClassA)
...
ElseIf type Is GetType(ClassB)
...
...
End If
Select Case(사례 선택)를 사용해야 하는 경우 다음과 같은 방법을 사용할 수 있습니다.
Select Case True
Case TypeOf msg Is ClassA
' do something '
Case TypeOf msg Is ClassB
' do something else '
Case Else
' and so on '
End Select
하지만 저는 대부분의 사람들이 이런 종류의 일을 피하고 싶어한다고 생각합니다.If/ElseIf가 더 분명할 것입니다.
이것은 동일한 서브에서 Button1과 Button2 클릭 이벤트를 처리하는 방법입니다(저는 VB6 프로그래머로 시작했기 때문에 VB6 제어 어레이 처리를 대체하기에 좋습니다).
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
Select Case True
Case sender Is Me.Button1
' Do Button1 stuff '
Case sender Is Me.Button2
' Do Button2 stuff '
End Select
End Sub
절대로 하지 않을 것입니다.select case true
하지만 당신은 이렇게 할 수 있습니다.
Select Case msg.GetType.Name
Case GetType(ClassA).Name
...
Case GetType(ClassB).Name
...
Case Else
...
End Select
이것보다 조금 더 깨끗한 것은 무엇입니까?
If msg.GetType Is GetType(ClassA) Then
...
ElseIf msg.GetType Is GetType(ClassB) Then
...
Else
...
End If
다음 항목:
Dim a As Object = New TextBox
Select Case True
Case TypeOf a Is TextBox
MsgBox("aaa")
Case TypeOf a Is ComboBox
Case TypeOf a Is ListBox
End Select
언급URL : https://stackoverflow.com/questions/1301881/select-case-on-an-objects-type-in-vb-net
'programing' 카테고리의 다른 글
지역 지점에서 다른 지점으로 "끌어내는" 방법은 무엇입니까? (0) | 2023.05.26 |
---|---|
속성 텍스트 센터 선형 (0) | 2023.05.26 |
NSLayoutConstraint의 승수 속성을 변경할 수 있습니까? (0) | 2023.05.26 |
하위 프로세스.call()에서 파일을 찾을 수 없습니다. (0) | 2023.05.26 |
클릭 버튼 클립보드에 복사 (0) | 2023.05.26 |