รายละเอียดเพิ่มเติมบางส่วนที่เกี่ยวข้องกับการตอบสนองจาก Cody Gray ในขณะที่ฉันใช้เวลาพอสมควรในการย่อยมันฉันแม้ว่ามันอาจจะเป็นประโยชน์สำหรับคนอื่น
ประการแรกคำจำกัดความบางประการ:
- มี TypeNames ซึ่งเป็นตัวแทนสตริงของประเภทของวัตถุอินเตอร์เฟซ ฯลฯ ตัวอย่างเช่นที่มี
Barเป็น TypeName ในหรือในPublic Class Bar Dim Foo as BarTypeNames อาจถูกมองว่าเป็น "เลเบล" ที่ใช้ในโค้ดเพื่อบอกคอมไพเลอร์ว่าต้องการค้นหานิยามประเภทใดในพจนานุกรมซึ่งจะมีการอธิบายประเภทที่มีอยู่ทั้งหมด
- มี
System.Typeวัตถุที่มีค่า ค่านี้ระบุประเภท เช่นเดียวกับที่Stringจะใช้ข้อความบางส่วนหรือIntจะใช้ตัวเลขยกเว้นเรากำลังจัดเก็บประเภทแทนข้อความหรือตัวเลข Typeออบเจ็กต์มีนิยามประเภทรวมถึง TypeName ที่สอดคล้องกัน
ประการที่สองทฤษฎี:
Foo.GetType()ส่งกลับวัตถุซึ่งมีชนิดสำหรับตัวแปรType Fooกล่าวอีกนัยหนึ่งก็คือจะบอกคุณว่าอะไรFooคือตัวอย่างของ
GetType(Bar)ส่งกลับTypeวัตถุซึ่งมีชนิดสำหรับ BarTypeName
ในบางกรณีประเภทของวัตถุCastนั้นแตกต่างจากประเภทที่วัตถุถูกสร้างอินสแตนซ์ครั้งแรก ในตัวอย่างต่อไปนี้ 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เข้ากันได้กับ BarTypeName Type Of MyObj Is Integerและ Type Of MyObj Is Objectทั้งคู่จะคืนค่า True สำหรับกรณีส่วนใหญ่ TypeOf จะระบุว่าตัวแปรเข้ากันได้กับ TypeName ถ้าตัวแปรนั้นเป็น Type นั้นหรือ Type ที่มาจากตัวแปรนั้น ข้อมูลเพิ่มเติมที่นี่: https://docs.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)
Debug.Print(MyValDble.GetType.ToString)
Debug.Print(MyObj.GetType.ToString)
Debug.Print(MyValInt.GetType.GetType.ToString)
Debug.Print(MyValDble.GetType.GetType.ToString)
Debug.Print(MyObj.GetType.GetType.ToString)
Debug.Print(GetType(Integer).GetType.ToString)
Debug.Print(GetType(Double).GetType.ToString)
Debug.Print(GetType(Object).GetType.ToString)
Debug.Print(MyValInt.GetType = GetType(Integer))
Debug.Print(MyValInt.GetType = GetType(Double))
Debug.Print(MyValInt.GetType = GetType(Object))
Debug.Print(MyValDble.GetType = GetType(Integer))
Debug.Print(MyValDble.GetType = GetType(Double))
Debug.Print(MyValDble.GetType = GetType(Object))
Debug.Print(MyObj.GetType = GetType(Integer))
Debug.Print(MyObj.GetType = GetType(Double))
Debug.Print(MyObj.GetType = GetType(Object))
Debug.Print(TypeOf MyObj Is Integer)
Debug.Print(TypeOf MyObj Is Double)
Debug.Print(TypeOf MyObj Is Object)
End Sub
แก้ไข
คุณยังสามารถใช้Information.TypeName(Object)เพื่อรับ TypeName ของวัตถุที่กำหนด ตัวอย่างเช่น,
Dim Foo as Bar
Dim Result as String
Result = TypeName(Foo)
Debug.Print(Result)