Bird
Raised Fist0
C Sharp (C#)programming~5 mins

Creating instances dynamically in C Sharp (C#)

Choose your learning style10 modes available
Introduction

Sometimes, you want to create objects while the program is running, not just when you write the code. This helps make your program flexible and able to handle different situations.

When you want to create objects based on user input or data from a file.
When you don't know in advance which class you need to create.
When you want to reduce repeated code by creating objects in a general way.
When building plugins or modules that load classes dynamically.
When you want to create many objects without writing each one manually.
Syntax
C Sharp (C#)
var instance = Activator.CreateInstance(typeof(ClassName));

// Or with generics:
var instance = Activator.CreateInstance<ClassName>();

Activator.CreateInstance is a built-in method to create objects when you only have the type at runtime.

You can also pass constructor arguments as extra parameters to CreateInstance.

Examples
This creates a Person object dynamically and prints the default name.
C Sharp (C#)
class Person {
    public string Name;
    public Person() {
        Name = "Unknown";
    }
}

var person = (Person)Activator.CreateInstance(typeof(Person));
Console.WriteLine(person.Name);
This creates a Car object dynamically and passes "Tesla" to the constructor.
C Sharp (C#)
class Car {
    public string Model;
    public Car(string model) {
        Model = model;
    }
}

var car = (Car)Activator.CreateInstance(typeof(Car), "Tesla");
Console.WriteLine(car.Model);
This creates a generic list of integers dynamically and prints its type name.
C Sharp (C#)
var list = (System.Collections.Generic.List<int>)Activator.CreateInstance(typeof(System.Collections.Generic.List<int>));
Console.WriteLine(list.GetType().Name);
Sample Program

This program creates an Animal object dynamically using its type and prints the default name.

C Sharp (C#)
using System;

class Animal {
    public string Name;
    public Animal() {
        Name = "NoName";
    }
}

class Program {
    static void Main() {
        Type type = typeof(Animal);
        var animal = (Animal)Activator.CreateInstance(type);
        Console.WriteLine($"Animal name: {animal.Name}");
    }
}
OutputSuccess
Important Notes

Make sure the class has a public constructor that matches the parameters you pass.

If the class does not have a parameterless constructor, you must provide arguments to CreateInstance.

Using dynamic creation can be slower than normal object creation, so use it only when needed.

Summary

You can create objects dynamically using Activator.CreateInstance.

This helps when you don't know the exact class at compile time.

Remember to match constructors and handle exceptions if creation fails.

Practice

(1/5)
1. What does Activator.CreateInstance(typeof(MyClass)) do in C#?
easy
A. Creates a new instance of the class MyClass at runtime.
B. Deletes an existing instance of MyClass.
C. Checks if MyClass has a default constructor.
D. Converts MyClass to a string representation.

Solution

  1. Step 1: Understand Activator.CreateInstance usage

    Activator.CreateInstance is used to create objects dynamically when the type is known only at runtime.
  2. Step 2: Analyze the given code

    The code Activator.CreateInstance(typeof(MyClass)) creates a new instance of MyClass using its default constructor.
  3. Final Answer:

    Creates a new instance of the class MyClass at runtime. -> Option A
  4. Quick Check:

    Activator.CreateInstance creates objects dynamically [OK]
Hint: Activator.CreateInstance makes objects when type is known at runtime [OK]
Common Mistakes:
  • Thinking it deletes or modifies existing objects
  • Confusing it with type checking or conversion
  • Assuming it calls any constructor without matching parameters
2. Which of the following is the correct syntax to create an instance of Person dynamically using Activator.CreateInstance?
easy
A. var obj = Activator.CreateInstance(typeof(Person));
B. var obj = new Activator.CreateInstance(typeof(Person));
C. var obj = Activator.CreateInstance<Person>(typeof(Person));
D. var obj = Person.CreateInstance();

Solution

  1. Step 1: Recall correct Activator.CreateInstance syntax

    The method Activator.CreateInstance takes a Type object as parameter, e.g., typeof(Person).
  2. Step 2: Evaluate each option

    var obj = Activator.CreateInstance<Person>(typeof(Person)); uses generic syntax incorrectly by passing a Type argument. var obj = new Activator.CreateInstance(typeof(Person)); tries to use new with a method call, which is wrong. var obj = Activator.CreateInstance(typeof(Person)); correctly calls Activator.CreateInstance(typeof(Person)). var obj = Person.CreateInstance(); calls a non-existent method.
  3. Final Answer:

    var obj = Activator.CreateInstance(typeof(Person)); -> Option A
  4. Quick Check:

    Use typeof(Type) inside Activator.CreateInstance [OK]
Hint: Use typeof(Type) inside Activator.CreateInstance() [OK]
Common Mistakes:
  • Using new keyword with Activator.CreateInstance
  • Trying to call generic version incorrectly
  • Calling non-existent CreateInstance on the class
3. What will be the output of this code?
class Animal { public string Name; public Animal() { Name = "Dog"; } }
var obj = Activator.CreateInstance(typeof(Animal));
Console.WriteLine(((Animal)obj).Name);
medium
A. null
B. Compilation error
C. Animal
D. Dog

Solution

  1. Step 1: Understand the class and constructor

    The class Animal has a default constructor that sets Name to "Dog".
  2. Step 2: Analyze Activator.CreateInstance and output

    Activator.CreateInstance(typeof(Animal)) creates a new Animal object, calling the default constructor. So Name is "Dog". The Console.WriteLine prints this value.
  3. Final Answer:

    Dog -> Option D
  4. Quick Check:

    Default constructor sets Name to Dog [OK]
Hint: Activator calls default constructor, so fields are initialized [OK]
Common Mistakes:
  • Assuming Name is null because of dynamic creation
  • Thinking output is class name string
  • Expecting compile or runtime error
4. Identify the error in this code snippet:
class Car { public int Speed; public Car(int speed) { Speed = speed; } }
var obj = Activator.CreateInstance(typeof(Car));
medium
A. No error, instance created successfully.
B. Missing parameterless constructor causes runtime exception.
C. Syntax error in Activator.CreateInstance call.
D. Cannot create instance of class with fields.

Solution

  1. Step 1: Check constructors in Car class

    The class Car has only a constructor with an int parameter. No default (parameterless) constructor exists.
  2. Step 2: Understand Activator.CreateInstance behavior

    Activator.CreateInstance(typeof(Car)) tries to call the default constructor. Since none exists, it throws a runtime exception.
  3. Final Answer:

    Missing parameterless constructor causes runtime exception. -> Option B
  4. Quick Check:

    Activator needs parameterless constructor unless parameters passed [OK]
Hint: Activator.CreateInstance needs parameterless constructor unless parameters given [OK]
Common Mistakes:
  • Assuming it creates instance without matching constructor
  • Thinking it's a syntax error
  • Believing fields prevent instance creation
5. You want to create an instance of a class dynamically and pass constructor parameters. Which is the correct way to do this?
class Book { public string Title; public Book(string title) { Title = title; } }
hard
A. var obj = new Book("C# Guide");
B. var obj = Activator.CreateInstance<Book>(typeof(Book));
C. var obj = Activator.CreateInstance(typeof(Book), "C# Guide");
D. var obj = Activator.CreateInstance(typeof(Book)); obj.Title = "C# Guide";

Solution

  1. Step 1: Understand how to pass parameters with Activator.CreateInstance

    To call a constructor with parameters dynamically, pass them as additional arguments after the type.
  2. Step 2: Evaluate options

    var obj = Activator.CreateInstance<Book>(typeof(Book)); uses invalid generic syntax by passing a Type argument. var obj = new Book("C# Guide"); uses normal instantiation, not dynamic. var obj = Activator.CreateInstance(typeof(Book), "C# Guide"); correctly passes the string parameter to the constructor. var obj = Activator.CreateInstance(typeof(Book)); obj.Title = "C# Guide"; creates default instance (which fails) and sets property manually, but no default constructor exists.
  3. Final Answer:

    var obj = Activator.CreateInstance(typeof(Book), "C# Guide"); -> Option C
  4. Quick Check:

    Pass constructor args after type in Activator.CreateInstance [OK]
Hint: Pass constructor arguments after type in Activator.CreateInstance [OK]
Common Mistakes:
  • Using generic syntax incorrectly
  • Trying to set properties after creation without default constructor
  • Confusing normal new with dynamic creation
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard