1#If STRICT Then 2Option Strict On 3#Else 4Option Strict Off 5#End If 6 7Class TypeConversion 8 Sub M() 9 Dim out_o As Object 10 Dim out_e As System.Enum 11 Dim out_v As System.ValueType 12 Dim out_d As System.Delegate 13 Dim out_ia As IA 14 Dim out_ib As IB 15 Dim out_ic As IC 16 Dim out_sa As SA 17 Dim out_da As DA 18 Dim out_ca As CA 19 Dim out_c_ia As C_IA 20 Dim out_e_i As E_I 21 22 Dim in_o As Object 23 Dim in_ia As IA 24 Dim in_ib As IB 25 Dim in_sa As SA 26 Dim in_da As DA 27 Dim in_ca As CA 28 Dim in_c_ia As C_IA 29 Dim in_c_ib As C_IB 30 Dim in_c_ic As C_IC 31 Dim in_str As String 32 Dim in_v As System.ValueType 33 Dim in_e As System.Enum 34 Dim in_d As System.Delegate 35 36 out_ia = CType(in_str, IA) 37 out_ia = CType(in_ia, IA) 38 out_ia = CType(in_ib, IA) 39 out_ia = CType(in_da, IA) 40 out_ia = CType(in_ca, IA) 41 out_ia = CType(in_c_ia, IA) 42 out_ia = in_c_ia 43 out_ia = CType(in_c_ib, IA) 44 out_ia = in_c_ic 45 out_ia = CType(in_o, IA) 46 47 out_ic = in_c_ic 48 49 out_o = in_ia 50 51#If Not STRICT Then 52 out_e = in_o 53 out_ia = in_o 54 out_sa = in_o 55 out_ca = in_o 56 out_da = in_o 57 out_ia = in_ib 58 out_ib = in_ia 59 out_v = in_sa 60 out_sa = in_v 61 out_e_i = in_e 62 out_ca = in_ia 63#End If 64 65 out_e = Nothing 66 out_v = Nothing 67 out_d = Nothing 68 out_ia = Nothing 69 out_sa = Nothing 70 out_da = Nothing 71 out_c_ia = Nothing 72 End Sub 73 74 Sub M_InRef(ByRef in_o As Object, ByRef in_ia As IA, ByRef in_ib As IB, ByRef in_sa As SA, ByRef in_da As da, _ 75 ByRef in_ca As ca, ByRef in_c_ia As c_ia, ByRef in_c_ib As c_ib, ByRef in_c_ic As c_ic, ByRef in_str As String, _ 76 ByRef in_v As system.valuetype, ByRef in_d As system.delegate, ByRef in_e As system.enum) 77 Dim out_o As Object 78 Dim out_e As System.Enum 79 Dim out_v As System.ValueType 80 Dim out_d As System.Delegate 81 Dim out_ia As IA 82 Dim out_ib As IB 83 Dim out_ic As IC 84 Dim out_sa As SA 85 Dim out_da As DA 86 Dim out_ca As CA 87 Dim out_c_ia As C_IA 88 Dim out_e_i As E_I 89 90 out_ia = CType(in_str, IA) 91 out_ia = CType(in_ia, IA) 92 out_ia = CType(in_ib, IA) 93 out_ia = CType(in_da, IA) 94 out_ia = CType(in_ca, IA) 95 out_ia = CType(in_c_ia, IA) 96 out_ia = in_c_ia 97 out_ia = CType(in_c_ib, IA) 98 out_ia = in_c_ic 99 out_ia = CType(in_o, IA) 100 101 out_ic = in_c_ic 102 103 out_o = in_ia 104 105#If Not STRICT Then 106 out_e = in_o 107 out_ia = in_o 108 out_sa = in_o 109 out_ca = in_o 110 out_da = in_o 111 out_ia = in_ib 112 out_ib = in_ia 113 out_v = in_sa 114 out_sa = in_v 115 out_e_i = in_e 116 out_ca = in_ia 117#End If 118 119 out_e = Nothing 120 out_v = Nothing 121 out_d = Nothing 122 out_ia = Nothing 123 out_sa = Nothing 124 out_da = Nothing 125 out_c_ia = Nothing 126 End Sub 127 128 Sub M_OutRef(ByRef out_o As Object, ByRef out_e As system.enum, ByRef out_v As system.valuetype, ByRef out_d As system.delegate, _ 129 ByRef out_ia As ia, ByRef out_ib As ib, ByRef out_ic As ic, ByRef out_sa As sa, ByRef out_da As da, ByRef out_ca As ca, _ 130 ByRef out_c_ia As c_ia, ByRef out_e_i As e_I) 131 Dim in_o As Object 132 Dim in_ia As IA 133 Dim in_ib As IB 134 Dim in_sa As SA 135 Dim in_da As DA 136 Dim in_ca As CA 137 Dim in_c_ia As C_IA 138 Dim in_c_ib As C_IB 139 Dim in_c_ic As C_IC 140 Dim in_str As String 141 Dim in_v As System.ValueType 142 Dim in_e As System.Enum 143 Dim in_d As System.Delegate 144 145 out_ia = CType(in_str, IA) 146 out_ia = CType(in_ia, IA) 147 out_ia = CType(in_ib, IA) 148 out_ia = CType(in_da, IA) 149 out_ia = CType(in_ca, IA) 150 out_ia = CType(in_c_ia, IA) 151 out_ia = in_c_ia 152 out_ia = CType(in_c_ib, IA) 153 out_ia = in_c_ic 154 out_ia = CType(in_o, IA) 155 156 out_ic = in_c_ic 157 158 out_o = in_ia 159 160#If Not STRICT Then 161 out_e = in_o 162 out_ia = in_o 163 out_sa = in_o 164 out_ca = in_o 165 out_da = in_o 166 out_ia = in_ib 167 out_ib = in_ia 168 out_v = in_sa 169 out_sa = in_v 170 out_e_i = in_e 171 out_ca = in_ia 172#End If 173 174 out_e = Nothing 175 out_v = Nothing 176 out_d = Nothing 177 out_ia = Nothing 178 out_sa = Nothing 179 out_da = Nothing 180 out_c_ia = Nothing 181 End Sub 182 183 Sub M_InOutRef(ByRef out_o As Object, ByRef out_e As system.enum, ByRef out_v As system.valuetype, ByRef out_d As system.delegate, _ 184 ByRef out_ia As ia, ByRef out_ib As ib, ByRef out_ic As ic, ByRef out_sa As sa, ByRef out_da As da, ByRef out_ca As ca, _ 185 ByRef out_c_ia As c_ia, ByRef out_e_i As e_I, _ 186 ByRef in_o As Object, ByRef in_ia As IA, ByRef in_ib As IB, ByRef in_sa As SA, ByRef in_da As da, _ 187 ByRef in_ca As ca, ByRef in_c_ia As c_ia, ByRef in_c_ib As c_ib, ByRef in_c_ic As c_ic, ByRef in_str As String, _ 188 ByRef in_v As system.valuetype, ByRef in_d As system.delegate, ByRef in_e As system.enum) 189 190 out_ia = CType(in_str, IA) 191 out_ia = CType(in_ia, IA) 192 out_ia = CType(in_ib, IA) 193 out_ia = CType(in_da, IA) 194 out_ia = CType(in_ca, IA) 195 out_ia = CType(in_c_ia, IA) 196 out_ia = in_c_ia 197 out_ia = CType(in_c_ib, IA) 198 out_ia = in_c_ic 199 out_ia = CType(in_o, IA) 200 201 out_ic = in_c_ic 202 203 out_o = in_ia 204 205#If Not STRICT Then 206 out_e = in_o 207 out_ia = in_o 208 out_sa = in_o 209 out_ca = in_o 210 out_da = in_o 211 out_ia = in_ib 212 out_ib = in_ia 213 out_v = in_sa 214 out_sa = in_v 215 out_e_i = in_e 216 out_ca = in_ia 217#End If 218 219 out_e = Nothing 220 out_v = Nothing 221 out_d = Nothing 222 out_ia = Nothing 223 out_sa = Nothing 224 out_da = Nothing 225 out_c_ia = Nothing 226 End Sub 227End Class 228 229Class Intrinsic 230 Sub NumericConversionsEnum() 231 Dim e_b As e_b 232 Dim e_i As e_i 233 Dim b As Byte 234 Dim i As Integer 235#If Not STRICT Then 236 e_b = 2 237 e_i = 4 238 239 e_b = b 240 e_i = i 241 e_b = i 242 e_i = b 243 b = e_b 244 b = e_i 245 i = e_b 246 i = e_i 247 e_b = e_i 248 e_i = e_b 249#End If 250 End Sub 251 252 Sub StringConversions() 253 Dim out_b As Byte 254 Dim out_sb As SByte 255 Dim out_s As Short 256 Dim out_us As UShort 257 Dim out_i As Integer 258 Dim out_ui As UInteger 259 Dim out_l As Long 260 Dim out_ul As ULong 261 Dim out_dec As Decimal 262 Dim out_bool As Boolean 263 Dim out_sng As Single 264 Dim out_dbl As Double 265 Dim out_str As String 266 Dim out_chr As Char 267 Dim out_dt As Date 268 269 Dim in_b As Byte 270 Dim in_sb As SByte 271 Dim in_s As Short 272 Dim in_us As UShort 273 Dim in_i As Integer 274 Dim in_ui As UInteger 275 Dim in_l As Long 276 Dim in_ul As ULong 277 Dim in_dec As Decimal 278 Dim in_bool As Boolean 279 Dim in_sng As Single 280 Dim in_dbl As Double 281 Dim in_str As String 282 Dim in_chr As Char 283 Dim in_dt As Date 284#If Not STRICT Then 285 out_b = in_str 286 out_sb = in_str 287 out_us = in_str 288 out_s = in_str 289 out_ui = in_str 290 out_i = in_str 291 out_ul = in_str 292 out_l = in_str 293 out_dec = in_str 294 out_sng = in_str 295 out_dbl = in_str 296 out_dt = in_str 297 298 out_str = in_b 299 out_str = in_sb 300 out_str = in_us 301 out_str = in_s 302 out_str = in_ui 303 out_str = in_i 304 out_str = in_ul 305 out_str = in_l 306 out_str = in_dec 307 out_str = in_sng 308 out_str = in_dbl 309 out_str = in_dt 310#End If 311 End Sub 312End Class 313 314Class ArrayType1 315 Sub M() 316 Dim in_ia() As ia 317 Dim in_ic() As ic 318 Dim in_ca() As ca 319 Dim in_cb() As cb 320 Dim in_ia2(,) As ia 321 Dim in_ia_D7(7) As ia 322 Dim in_ia_R2()() As ia 323 Dim in_c_ia() As c_ia 324 Dim in_e_b() As e_b 325 Dim in_e_i() As e_i 326 Dim in_byte() As Byte 327 Dim in_integer() As Integer 328 Dim in_enum() As system.enum 329 Dim in_vt() As system.valuetype 330 331 Dim out_ia() As ia 332 Dim out_ic() As ic 333 Dim out_ca() As ca 334 Dim out_cb() As cb 335 Dim out_c_ia() As c_ia 336 Dim out_ia_D6(6) As ia 337 Dim out_e_b() As e_b 338 Dim out_e_i() As e_i 339 Dim out_byte() As Byte 340 Dim out_integer() As Integer 341 Dim out_enum() As system.enum 342 Dim out_vt() As system.valuetype 343 Dim out_obj() As Object 344 Dim out As system.array 345 346 out_ia = in_ia 347 out_ia = in_ic 348#If Not STRICT Then 349 out_ic = in_ia 350#End If 351 352 out_ia = in_c_ia 353 out_ca = in_cb 354 355 out_ia_D6 = in_ia_D7 356 out_e_b = in_e_b 357 out_byte = in_e_b 358 out_integer = in_e_i 359 out_enum = in_enum 360#If Not STRICT Then 361 out_e_i = in_integer 362#End If 363 364 out_obj = in_enum 365 out_obj = in_vt 366 out = in_enum 367 out = in_vt 368 out = in_integer 369 out = in_e_i 370 End Sub 371 372 Sub TG1(Of X As Structure)() 373 Dim in_a() As X 374 Dim in_b() As X 375 in_a = in_b 376 End Sub 377End Class 378 379Class ValueType1 380 Sub M() 381 Dim in_sa As sa 382 Dim in_sb As sb 383 Dim in_s_ic As s_ic 384 Dim in_ia As ia 385 Dim in_ic As ic 386 Dim in_id As id(Of Object) 387 Dim in_s_id As s_id(Of Object) 388 Dim in_s_id_byte As s_id(Of Byte) 389 390 Dim out_sa As sa 391 Dim out_sb As sb 392 Dim out_s_ic As s_ic 393 Dim out_ia As ia 394 Dim out_ic As ic 395 Dim out_vt As system.valuetype 396 Dim out As Object 397 Dim out_id As id(Of Object) 398 Dim out_id_str As id(Of String) 399 400 out_sa = in_sa 401 out_ia = in_s_ic 402 out_ic = in_s_ic 403 out_vt = in_sa 404 out_vt = in_s_ic 405 out = in_sa 406 out_id = in_s_id 407#If Not STRICT Then 408 out_s_ic = in_ic 409#End If 410 End Sub 411End Class 412 413Class String1 414 Sub M() 415 Dim c As Char 416 Dim s As String 417 Dim c_arr() As Char 418 419 s = c 420 s = c_arr 421#If Not STRICT Then 422 c = s 423 c_arr = s 424#End If 425 End Sub 426End Class 427 428Class Nullable1 429 Sub M() 430 Dim in_i_n As Integer? 431 Dim in_i As Integer 432 Dim in_s As Short 433 Dim in_s_n As Short? 434 Dim in_s_ic_n As s_ic? 435 Dim in_s_id_n As s_id(Of String)? 436 437 Dim out_i_n As Integer? 438 Dim out_i As Integer 439 Dim out_s_n As Short? 440 Dim out_s As Short 441 Dim out_ic As ic 442 Dim out_ib As ib 443 Dim out_id As id(Of String) 444 445 out_i_n = in_i 446 out_i_n = in_s 447 out_s_n = in_s_n 448 out_ic = in_s_ic_n 449 out_ib = in_s_ic_n 450 out_id = in_s_id_n 451 452#If Not STRICT Then 453 out_i = in_i_n 454 out_s_n = in_i_n 455 out_s_n = in_i 456 out_s = in_i_n 457#End If 458 out_ic = in_s_ic_n 459 End Sub 460End Class 461 462Class GenericType1A(Of C) 463 Shared Sub GenericMethodTypeArgument(Of M)(ByVal a As C, ByVal b As M) 464 Dim o As Object 465 Dim l As Long 466 467 o = a 468 o = b 469#If Not STRICT Then 470 a = o 471 b = o 472#End If 473 l = CLng(CObj(a)) 474 l = CLng(CObj(b)) 475 End Sub 476End Class 477Class GenericType1B(Of C As Structure) 478 Shared Sub GenericMethodTypeArgument(Of M As Structure)(ByVal a As C, ByVal b As M) 479 Dim o As Object 480 481 o = a 482 o = b 483#If Not STRICT Then 484 a = o 485 b = o 486#End If 487 End Sub 488End Class 489Class GenericType1C(Of C As Class) 490 Shared Sub GenericMethodTypeArgument(Of M As Class)(ByVal a As C, ByVal b As M) 491 Dim o As Object 492 493 o = a 494 o = b 495 End Sub 496End Class 497Class GenericType1D(Of C As New) 498 Shared Sub GenericMethodTypeArgument(Of M)(ByVal a As C, ByVal b As M) 499 Dim o As Object 500 501 o = a 502 o = b 503 End Sub 504End Class 505 506Class GenericType2A(Of C As IA) 507 Shared Sub GenericMethodTypeArgument(Of M As IA)(ByVal a As C, ByVal b As M) 508 Dim o As IA 509 Dim o2 As IB 510 511 o = a 512 o = b 513#If Not STRICT Then 514 a = o 515 b = o 516 a = o2 517 b = o2 518#End If 519 End Sub 520End Class 521 522Class GenericType2B(Of C As IC) 523 Shared Sub GenericMethodTypeArgument(Of M As IC)(ByVal a As C, ByVal b As M) 524 Dim o As IA 525 Dim o2 As IB 526 Dim o3 As IC 527 528 o = a 529 o = b 530#If Not STRICT Then 531 o2 = a 532 o2 = b 533 o3 = a 534 o3 = b 535#End If 536 End Sub 537End Class 538 539Class GenericType3A(Of C As C_IA) 540 Shared Sub GenericMethodTypeArgument(Of M As C_IA)(ByVal a As C, ByVal b As M) 541 Dim o As IA 542 Dim o2 As C_IA_D 543 o = a 544 o = b 545 End Sub 546End Class 547 548Class GenericType4A(Of C As C_IA) 549 Shared Sub GenericMethodTypeArgument(Of M As C_IA)(ByVal a As C, ByVal b As M) 550 Dim enumerableC As system.collections.generic.ienumerable(Of C) 551 Dim arrC() As M 552 Dim enumerableA As system.collections.generic.ienumerable(Of M) 553 Dim arrA() As M 554 555 enumerableC = arrC 556 enumerableA = arrA 557 End Sub 558End Class 559 560Interface IA 561 562End Interface 563Interface IB 564 565End Interface 566Interface IC 567 Inherits IA, IB 568End Interface 569Interface ID(Of T) 570 571End Interface 572 573Delegate Sub DA() 574 575Class CA 576End Class 577 578Class CB 579 Inherits CA 580End Class 581 582Class C_IA 583 Implements IA 584End Class 585Class C_IA_D 586 Inherits C_IA 587End Class 588Class C_IB 589 Implements IB 590End Class 591Class C_IC 592 Implements IC 593End Class 594 595Enum E_B As Byte 596 a 597End Enum 598Enum E_I As Integer 599 a 600End Enum 601 602Structure SA 603 Dim v As Integer 604End Structure 605Structure SB 606 Dim v As Integer 607End Structure 608Structure S_IC 609 Implements IC 610 Dim v As Integer 611End Structure 612Structure S_ID(Of T) 613 Implements ID(Of T) 614 Dim v As Integer 615End Structure 616