개체가 특정 유형인지 확인하는 방법
나는 같은 프로세스를 실행하기 위해 서브루틴에 다양한 객체를 전달하고 있지만 매번 다른 객체를 사용하고 있습니다.예를 들어 ListView를 사용하는 경우와 DropDownList를 전달하는 경우가 있습니다.
전달되는 객체가 DropDownList인지 확인하고 코드가 있으면 실행하고 싶습니다.이거 어떻게 하는 거지?
지금까지 작동하지 않는 내 코드:
Sub FillCategories(ByVal Obj As Object)
Dim cmd As New SqlCommand("sp_Resources_Categories", Conn)
cmd.CommandType = CommandType.StoredProcedure
Obj.DataSource = cmd.ExecuteReader
If Obj Is System.Web.UI.WebControls.DropDownList Then
End If
Obj.DataBind()
End Sub
VB.NET에서는 메소드를 사용하여 개체의 인스턴스 유형을 검색하고 연산자를 사용하여 알려진 다른 유형의 유형을 검색해야 합니다.
두 가지 유형이 있으면 다음을 사용하여 간단히 비교할 수 있습니다.Is
교환입니다.
따라서 코드는 실제로 다음과 같이 작성되어야 합니다.
Sub FillCategories(ByVal Obj As Object)
Dim cmd As New SqlCommand("sp_Resources_Categories", Conn)
cmd.CommandType = CommandType.StoredProcedure
Obj.DataSource = cmd.ExecuteReader
If Obj.GetType() Is GetType(System.Web.UI.WebControls.DropDownList) Then
End If
Obj.DataBind()
End Sub
또한 다음 대신 연산자를 사용할 수 있습니다.GetType
방법.이 테스트는 개체가 동일한 유형인지 여부가 아니라 지정된 유형과 호환되는지 여부를 테스트합니다.이는 다음과 같습니다.
If TypeOf Obj Is System.Web.UI.WebControls.DropDownList Then
End If
전혀 중요하지 않은 사소한 트집:전통적으로 매개변수 이름은 쓸 때 camelCased(항상 소문자로 시작함을 의미)입니다.NET 코드(VB 중 하나).NET 또는 C#).이를 통해 클래스, 유형, 방법 등을 한눈에 쉽게 구분할 수 있습니다.
코디 그레이의 답변과 관련된 몇 가지 세부 사항.소화하는 데 시간이 좀 걸려서 다른 사람들에게 유용할 수도 있다고 생각했습니다.
첫째, 몇 가지 정의:
- 개체, 인터페이스 등의 유형에 대한 문자열 표현인 TypeNames가 있습니다.예를들면,
Bar
의 형식 이름입니다.Public Class Bar
또는 안에Dim Foo as Bar
TypeNames는 코드에서 사용 가능한 모든 유형이 설명되는 사전에서 찾을 유형 정의를 컴파일러에게 알려주는 "라벨"로 볼 수 있습니다. - 값을 포함하는 개체가 있습니다.이 값은 다음과 같이 유형을 나타냅니다.
String
약간의 텍스트 또는Int
텍스트나 숫자 대신 유형을 저장하는 것을 제외하고는 숫자가 필요합니다.Type
개체에는 형식 정의와 해당하는 TypeName이 포함됩니다.
둘째, 이론:
Foo.GetType()
를 반환합니다.Type
변수 유형을 포함하는 개체Foo
다시 말해서, 그것은 당신에게 무엇을 말해줍니다.Foo
의 예입니다.GetType(Bar)
를 반환합니다.Type
TypeName의 입니다.Bar
.경우에 따라 개체의 형식이 변경될 수 있습니다.
Cast
to는 개체가 처음 인스턴스화된 형식과 다릅니다.는 다음예서 MyObj입니다.Integer
에던다에Object
:Dim MyVal As Integer = 42 Dim MyObj As Object = CType(MyVal, Object)
그래서?MyObj
Object
이 는또유형입니다.Integer
?MyObj.GetType()
그것은 당신에게 말할 것입니다.Integer
.
- 하지만 여기에 그가 옵니다.
Type Of Foo Is Bar
를 할 수 입니다.Foo
TypeName과 됩니다.Bar
.Type Of MyObj Is Integer
그리고.Type Of MyObj Is Object
둘 다 True를 반환합니다.대부분의 경우 TypeOf는 변수가 TypeName 또는 Type에서 파생된 Type이면 변수가 TypeName과 호환됨을 나타냅니다.자세한 내용은 https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarks 에서 확인할 수 있습니다.
아래 테스트는 언급된 각 키워드와 속성의 동작과 사용을 잘 보여줍니다.
Public Sub TestMethod1()
Dim MyValInt As Integer = 42
Dim MyValDble As Double = CType(MyValInt, Double)
Dim MyObj As Object = CType(MyValDble, Object)
Debug.Print(MyValInt.GetType.ToString) 'Returns System.Int32
Debug.Print(MyValDble.GetType.ToString) 'Returns System.Double
Debug.Print(MyObj.GetType.ToString) 'Returns System.Double
Debug.Print(MyValInt.GetType.GetType.ToString) 'Returns System.RuntimeType
Debug.Print(MyValDble.GetType.GetType.ToString) 'Returns System.RuntimeType
Debug.Print(MyObj.GetType.GetType.ToString) 'Returns System.RuntimeType
Debug.Print(GetType(Integer).GetType.ToString) 'Returns System.RuntimeType
Debug.Print(GetType(Double).GetType.ToString) 'Returns System.RuntimeType
Debug.Print(GetType(Object).GetType.ToString) 'Returns System.RuntimeType
Debug.Print(MyValInt.GetType = GetType(Integer)) '# Returns True
Debug.Print(MyValInt.GetType = GetType(Double)) 'Returns False
Debug.Print(MyValInt.GetType = GetType(Object)) 'Returns False
Debug.Print(MyValDble.GetType = GetType(Integer)) 'Returns False
Debug.Print(MyValDble.GetType = GetType(Double)) '# Returns True
Debug.Print(MyValDble.GetType = GetType(Object)) 'Returns False
Debug.Print(MyObj.GetType = GetType(Integer)) 'Returns False
Debug.Print(MyObj.GetType = GetType(Double)) '# Returns True
Debug.Print(MyObj.GetType = GetType(Object)) 'Returns False
Debug.Print(TypeOf MyObj Is Integer) 'Returns False
Debug.Print(TypeOf MyObj Is Double) '# Returns True
Debug.Print(TypeOf MyObj Is Object) '# Returns True
End Sub
편집
를 사용하여 지정된 개체의 유형 이름을 가져올 수도 있습니다.예를들면,
Dim Foo as Bar
Dim Result as String
Result = TypeName(Foo)
Debug.Print(Result) 'Will display "Bar"
언급URL : https://stackoverflow.com/questions/6580044/how-to-check-if-an-object-is-a-certain-type
'programing' 카테고리의 다른 글
[알림]이란 무엇입니까?속성 변경됨INOTIFY를 구현하는 경우 C#에서 Invocator]속성이 변경되었습니까? (0) | 2023.05.10 |
---|---|
기존 권한을 가진 사용자를 신속하게 삭제하는 방법 (0) | 2023.05.10 |
Git에 "합병되지 않은 파일이 있으므로 꺼내기가 불가능합니다"라고 표시되는 이유는 무엇입니까? (0) | 2023.05.10 |
다음을 클릭한 후 알림 제거 (0) | 2023.05.05 |
Youtube_dl : 오류: YouTube에서 다음과 같이 말했습니다.비디오 데이터를 추출할 수 없습니다. (0) | 2023.05.05 |