views:

31

answers:

1

Hello,

I'm trying to use reflection to get the instance of a class in vb.net. I have a class 'A' in my web project and to test it, i create a new aspx page and try to write the following:

Dim t as Type = Type.GetType("A")

This returns "Nothing". But if i do this:

Dim inst as A = new A()
Dim t as Type = inst.GetType()

t's type is "A"

So how come i can't get the type with GetType even if the name is exactly the same? It does works for things like System.Math though so i'm probably missing something as a newbie.

+1  A: 

Two things:

  • You need to include the namespace of the type
  • If the type isn't in mscorlib or the currently executing assembly, you need to specify the assembly name as well (including version numbers and public key information if it's a strongly-named assembly).

So for instance, to get hold of System.Linq.Enumerable you'd need something like:

Type.GetType("System.Linq.Enumerable, System.Core, Version=4.0.0.0, " & _
             "Culture=neutral, PublicKeyToken=b77a5c561934e089")
Jon Skeet
I guess that's where i get confused. It's a web project and i've added it as a class to that project. There is no namespace defined for that class, although i've tried to defined it and ended up with the same result. So i guess it should be in the currently executing assembly, unless i'm missing something.
Marius S.
@Maruis: If you follow your second code to get a `Type` instance from a real object you can use `Type.FullName` to see the complete name including namespace. In ASP.NET depending on WAP or WSP the assembly may be created dynamically (compile on demand), so use `Assembly.GetExecutingAssembly()`.
Richard
That's exactly what i've done with the Type.FullName. I tried doing Type.GetType(realobjecttype.FullName) and it still returned Nothing.
Marius S.
@Marius: Don't use FullName... use AssemblyQualifiedName.
Jon Skeet
I tried, but when i typed "thetype.", i didn't get AssemblyQualifiedName in the popup list so i thought it wasn't available.
Marius S.