Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Create object through classname

4 views
Skip to first unread message

Bert

unread,
Feb 20, 2006, 8:51:24 AM2/20/06
to
Hi,

I want to create an instance of a class by means of the classname. Can't figure out how.

in pseudocode this would look like:

Dim MyClassName as String = "MyClass"
Dim MyObject as New MyClasses(MyClassName)

Thanks for your help,

Egbert

Armin Zingler

unread,
Feb 20, 2006, 9:06:26 AM2/20/06
to
"Bert" <edoo...@aequor.nl> schrieb

> Hi,
>
> I want to create an instance of a class by means of the classname.
> Can't figure out how.
>
> in pseudocode this would look like:
>
> Dim MyClassName as String = "MyClass"
> Dim MyObject as New MyClasses(MyClassName)


I wonder why people need the class name at runtime, but if it's necessary,
have a look at System.Activator.CreateInstance


Armin

Cor Ligthert [MVP]

unread,
Feb 20, 2006, 9:15:31 AM2/20/06
to
Egbert,

Do you have a goal with this thousand times by newbies asked questions who
want to convert VBA functions to VBNet?

Be aware that VBNet does beside using it for giving debugging informations
nothing with Object names, it is just for you to make it readable.

Cor


Carlos J. Quintero [VB MVP]

unread,
Feb 20, 2006, 9:35:29 AM2/20/06
to
Hi Egbert,

As Armin has said, you can use the System.Activator.CreateInstance methods
to create an instance, but be aware that this pseudo-code:

Dim MyClassName as String = "MyClass"
Dim MyObject as New MyClasses(MyClassName)

is not very robust. If the name of the type "MyClass" changes and you don´t
update that string, your code will fail at run-time. A more common approach
is to create the instance from the type:
System.Activator.CreateInstance(type), and you can get the type through
several ways. For example, you can get the types of an assembly with
Assembly.GetTypes, or only the public types with Assembly.GetExportedTypes.
You can examine some properties (the bases or implemented interfaces) of the
type to guess which ones you want to create instances from. This is quite
common when creating plug-in frameworks.

Bottom line: if you know what you are doing, OK, but if not you can think
about the above.

--

Best regards,

Carlos J. Quintero

MZ-Tools: Productivity add-ins for Visual Studio
You can code, design and document much faster:
http://www.mztools.com


"Bert" <edoo...@aequor.nl> escribió en el mensaje
news:%238CT6Ti...@TK2MSFTNGP15.phx.gbl...

Bert

unread,
Feb 20, 2006, 10:04:27 AM2/20/06
to
Thanks Armin, Carlos and Cor,

I do have a goal with this question, I'm using a form that uses objects from different classes, depending on user's input. So in order to create the objects I need this code:

Function CreateObject("ClassName" as String) as Object
dim oType as Type = Type.GetType("ClassName")
Return Activator.CreateInstance(oType)
End Function

No worries about changing names, since everything is decribed and maintained in the databases.

Egbert

"Armin Zingler" <az.n...@freenet.de> wrote in message news:e$QtEciNG...@TK2MSFTNGP14.phx.gbl...

Armin Zingler

unread,
Feb 20, 2006, 10:55:08 AM2/20/06
to
"Bert" <edoo...@aequor.nl> schrieb

> Thanks Armin, Carlos and Cor,
>
> I do have a goal with this question, I'm using a form that uses
> objects from different classes, depending on user's input. So in
> order to create the objects I need this code:
>
> Function CreateObject("ClassName" as String) as Object
> dim oType as Type = Type.GetType("ClassName")
> Return Activator.CreateInstance(oType)
> End Function
>
> No worries about changing names, since everything is decribed and
> maintained in the databases.


After creating the object, do you intend to use the members inherited
from System.Object only?


Armin

Bert

unread,
Feb 20, 2006, 10:58:38 AM2/20/06
to
No, I use the members by means of Reflection.

Egbert

"Armin Zingler" <az.n...@freenet.de> wrote in message news:epYI%23YjNG...@tk2msftngp13.phx.gbl...

Armin Zingler

unread,
Feb 20, 2006, 11:06:52 AM2/20/06
to
"Bert" <edoo...@aequor.nl> schrieb

> > >
> > > Function CreateObject("ClassName" as String) as Object
> > > dim oType as Type = Type.GetType("ClassName")
> > > Return Activator.CreateInstance(oType)
> > > End Function
> > >
> > > No worries about changing names, since everything is decribed
> > > and maintained in the databases.
> >
> >
> > After creating the object, do you intend to use the members
> > inherited from System.Object only?
>
> No, I use the members by means of Reflection.


I see. I asked only because otherwise I would have suggested a common
interface or base class.


Armin

Herfried K. Wagner [MVP]

unread,
Feb 20, 2006, 3:33:58 PM2/20/06
to
"Bert" <edoo...@aequor.nl> schrieb:

>I want to create an instance of a class by means of the classname. Can't
>figure out how.
>
>in pseudocode this would look like:
>
>Dim MyClassName as String = "MyClass"
>Dim MyObject as New MyClasses(MyClassName)

Check out the snippets at
<URL:http://dotnet.mvps.org/dotnet/code/techniques/#ClassByName>.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>

0 new messages