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

Creating instances dynamically in C Sharp (C#) - Visual Walkthrough

Choose your learning style10 modes available
Concept Flow - Creating instances dynamically
Start
↓
Get Type info
↓
Call Activator.CreateInstance
↓
New object created
↓
Use the object
↓
End
This flow shows how a program gets type information, creates an instance dynamically, and then uses the new object.
Execution Sample
C Sharp (C#)
using System;

class Person {
  public string Name;
  public Person() { Name = "Unknown"; }
}

class Program {
  static void Main() {
    var type = typeof(Person);
    var obj = Activator.CreateInstance(type);
    Console.WriteLine(((Person)obj).Name);
  }
}
This code creates a Person object dynamically and prints its Name property.
Execution Table
StepActionEvaluationResult
1Get type infotypeof(Person)Person type info stored in 'type'
2Create instanceActivator.CreateInstance(type)New Person object created, stored in 'obj'
3Access property((Person)obj).Name"Unknown"
4Print outputConsole.WriteLineOutputs: Unknown
5EndNo more codeProgram ends
💡 All steps completed, instance created and used successfully.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
typenullPerson type infoPerson type infoPerson type infoPerson type info
objnullnullPerson instancePerson instancePerson instance
NameN/AN/AN/A"Unknown""Unknown"
Key Moments - 2 Insights
Why do we need to cast 'obj' to Person before accessing 'Name'?
Because Activator.CreateInstance returns an object of type 'object', we must cast it to 'Person' to access Person-specific members like 'Name'. See execution_table step 3.
What happens if the type does not have a parameterless constructor?
Activator.CreateInstance will throw an exception because it requires a parameterless constructor to create the instance. This is implied in step 2 where creation succeeds.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'Name' after step 3?
Anull
B"Unknown"
C"Person"
DThrows error
💡 Hint
Check the 'Result' column in step 3 of execution_table.
At which step is the new Person object created?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the 'Action' and 'Result' columns in execution_table for object creation.
If we forget to cast 'obj' to Person, what happens when accessing 'Name'?
AIt prints "Unknown" anyway
BRuntime error
CCompilation error
DIt prints null
💡 Hint
Casting is needed to access Person members; see key_moments explanation.
Concept Snapshot
Creating instances dynamically in C#:
- Use typeof(TypeName) to get type info.
- Use Activator.CreateInstance(type) to create an object.
- Cast the object to the correct type to access members.
- Requires a parameterless constructor.
- Useful for flexible, runtime object creation.
Full Transcript
This example shows how to create an instance of a class dynamically in C#. First, we get the type information using typeof. Then, we call Activator.CreateInstance with that type to create a new object. Since the method returns a generic object, we cast it to the specific class to access its properties. Finally, we print the Name property which is set to "Unknown" by the constructor. This process allows creating objects when the type is not known until runtime.

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