In Visual Basic .NET, la keyword GetType è più vicina alla BCL rispetto alla keyword corrispondente typeof in C#. Questa vicinanza però, non deve creare confusione tra keyword e metodo. Mi spiego con un esempio tipo quiz :-)
Supponiamo di avere questi due file in Visual Basic .NET, Foo.vb:
' Foo.vb
Public Class Foo : End Class
e Test.vb:
' Test.vb
Imports System
Class Test
Shared Sub Main()
Console.WriteLine(Type.GetType(GetType(Foo).FullName))
End Sub
End Class
che compilano senza errori. Il risultato dell'esecuzione di Test però, dipende dalle "compiler option" con cui li abbiamo compilati:
vbc test.vb foo.vb
oppure con:
vbc /t:module foo.vb
vbc /addmodule:foo.netmodule test.vb
l'esecuzione di Test stampa Foo a console;
- se invece compiliamo con:
vbc /t:library foo.vb
vbc /r:foo.dll test.vb
l'esecuzione di Test non stampa niente (l'espressione è Nothing).
La spiegazione sta in questo frammento della Reference:
"If typeName includes only the name of the Type, this method searches in the calling object's assembly, then in the mscorlib.dll assembly".
Nel primo caso il tipo Foo si trova nell'assembly chiamante (o in un suo modulo) ma nel secondo caso si trova in un altro assembly (foo.dll).