Is there a way to create an instance of a class based on the fact I know the name of the class at runtime. Basically I would have the name of the class in a string.
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Generic Generics in Managed C++
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
To create an instance of a class from another project in the solution, you can get the assembly indicated by the name of any class (for example BaseEntity) and create a new instance:
why do u want to write a code like this? If you have a class 'ReportClass' is available, you can instantiate it directly as shown below.
The code
ReportClass report = (ReportClass)Activator.CreateInstance(Type.GetType(reportClass));
is used when you dont have the necessary class available, but you want to instantiate and or or invoke a method dynamically.I mean it is useful when u know the assembly but while writing the code you dont have the class
ReportClass
available.I've used this method successfully:
You'll need to cast the returned object to your desired object type.
Its pretty simple. Assume that your classname is
Car
and the namespace isVehicles
, then pass the parameter asVehicles.Car
which returns object of typeCar
. Like this you can create any instance of any class dynamically.If your Fully Qualified Name(ie,
Vehicles.Car
in this case) is in another assembly, theType.GetType
will be null. In such cases, you have loop through all assemblies and find theType
. For that you can use the below codeNow if you want to call a parameterized constructor do the following
instead of
You seem to have described the solution you want to implement, but not the problem you're trying to solve.
Perhaps you are trying to do something with extensibility, in which case I suggest you check out the Managed Extensibility Framework.
For instance, if you store values of various types in a database field (stored as string) and have another field with the type name (i.e., String, bool, int, MyClass), then from that field data, you could, conceivably, create a class of any type using the above code, and populate it with the value from the first field. This of course depends on the type you are storing having a method to parse strings into the correct type. I've used this many times to store user preference settings in a database.