In Java I am able to have a list of classes like:
List<Class>
But how do I do this in C#?
In Java I am able to have a list of classes like:
List<Class>
But how do I do this in C#?
If you mean a list of actual classes, not instances of a class, then you can use Type
instead of Class
. Something like this:
List<Type> types = new List<Type>();
types.Add(SomeClass.GetType());
types.Add(SomeOtherClass.GetType());
To actually instantiate a class given a classes Type
you can use Activator
or reflection. See this post for information on that. It can get a little complicated however when the compiler doesn't know about the constructors/parameters and such.
// Create an instance of types[0] using the default constructor
object newObject = Activator.CreateInstance(types[0]);
Or alternatively
// Get all public constructors for types[0]
var ctors = types[0].GetConstructors(BindingFlags.Public);
// Create a class of types[0] using the first constructor
var object = ctors[0].Invoke(new object[] { });
The same basic syntax works in C#:
List<YourClass> list = new List<YourClass>();
This requires you to have using System.Collections.Generic;
at the top of your file, which is the namespace which provides most of the generic collections.
If you are attempting to store a list of types, you can use List<System.Type>
. Instances of those types could then be constructed via Activator.CreateInstance (which accepts the type) as needed.
// Create the list
List<ClassName> classList = new List<ClassName>();
// Create instance of your object
ClassName cn = new ClassName();
// Add the object to the list
classList.Add(cn);