The class to instantiate:
public class InstantiateMe
{
public String foo
{
get;
set;
}
}
Some pseudo-code:
public void CreateInstanceOf(Type t)
{
var instance = new t();
instance.foo = "bar";
}
So far I'm figuring that I need to use reflection to get this done, given the dynamic nature of what I want to achieve.
Here's my success criteria's:
- Create an instance of any type
- Create instances of types without having to invoke their constructor
- Access all public properties
I would greatly appreciate some working example-code. I'm not new to C#, but I've never worked with reflection before.
Try the following to actually create the instance.
It is not possible however, without generics and constraints to statically access the members as shown in your example.
You could do it with the following though
Since you have the type you want to instantiate, you can use a generic helper method for that:
Else if you are pulling out the type of some where else (like a dynamically loaded assembly) and you have not access to the type directly (it is some sort of meta programming or reflected data) you should use reflection.
You'd basically need to use Reflection. Use
Activator.CreateInstance()
to construct your type and then callInvokeMember()
on the type, to set the property:To access all the properties of the generic type and set/get them, you can use
GetProperties()
which returns aPropertyInfo
collection, which you can iterate through:Also, see the documentation for more ways of using
InvokeMember()
.