A generic class is a class that can work with any data type. It uses a placeholder (type parameter) that is replaced with a real type when the class is used.
Click to reveal answer
beginner
How do you declare a generic class named <code>Box</code> with one type parameter <code>T</code>?
You write: <pre>public class Box<T> { }</pre> This means <code>Box</code> can hold any type <code>T</code> you choose later.
Click to reveal answer
beginner
Why use generic classes instead of normal classes?
Generic classes let you write flexible and reusable code. You avoid repeating the same code for different data types and get type safety without casting.
Click to reveal answer
beginner
What does <code>T</code> represent in <code>class Box<T></code>?
T is a type parameter. It is a placeholder for a real data type that you specify when creating an object of the class.
Click to reveal answer
beginner
How do you create an instance of a generic class Box<T> for type int?
You write:
Box<int> intBox = new Box<int>();
This creates a Box that works with integers.
Click to reveal answer
What symbol is used to declare a generic type parameter in a class?
A<>
B()
C[]
D{}
✗ Incorrect
Generic type parameters are declared inside angle brackets <> after the class name.
Which of these is a correct generic class declaration?
Apublic class List{T} { }
Bpublic class List(T) { }
Cpublic class List[T] { }
Dpublic class List<T> { }
✗ Incorrect
The correct syntax uses angle brackets <> for generic type parameters.
What does the T in class Box<T> stand for?
AA specific type like int
BA placeholder for any type
CA method name
DA variable name
✗ Incorrect
T is a placeholder that can be replaced by any type when the class is used.
Why are generic classes useful?
AThey allow code reuse for different data types
BThey make code slower
CThey only work with strings
DThey remove type safety
✗ Incorrect
Generic classes let you write one class that works with many types, improving reuse and safety.
How do you create an object of a generic class Box<T> for strings?
ABox myBox = new Box();
BBox<T> myBox = new Box<T>();
CBox<string> myBox = new Box<string>();
DBox<string> myBox = Box<string>();
✗ Incorrect
You specify the type in angle brackets when creating the object and use the new keyword.
Explain what a generic class is and why it is useful in C#.
Think about how you can write one class to work with many types.
You got /4 concepts.
Describe how to declare and create an instance of a generic class with an example.
Use the example of a class named Box with type T.
You got /4 concepts.
Practice
(1/5)
1.
What is the main purpose of declaring a generic class in C# using <T>?
easy
A. To allow the class to work with any data type safely
B. To restrict the class to only one specific data type
C. To make the class run faster by avoiding type checks
D. To create multiple classes with different names automatically
Solution
Step 1: Understand generic class purpose
Generic classes use type parameters to work with any data type, improving code reuse and safety.
Step 2: Compare options with generic concept
Only To allow the class to work with any data type safely correctly states that generics allow safe use with any data type.
Final Answer:
To allow the class to work with any data type safely -> Option A
Quick Check:
Generic class purpose = safe, reusable code [OK]
Hint: Generics = flexible types for safe reuse [OK]
Common Mistakes:
Thinking generics restrict to one type
Believing generics improve speed by skipping checks
Confusing generics with automatic class creation
2.
Which of the following is the correct syntax to declare a generic class named Box with one type parameter?
?
easy
A. public class Box<T>() { }
B. public class Box<T> { }
C. public class Box(T) { }
D. public class Box[] { }
Solution
Step 1: Recall generic class syntax
Generic classes use angle brackets with type parameters: class ClassName<T>.
Step 2: Check each option
public class Box<T> { } matches correct syntax. Options A, B, and D have syntax errors or wrong symbols.
Final Answer:
public class Box<T> { } -> Option B
Quick Check:
Generic syntax = class Name<T> [OK]
Hint: Generic classes use angle brackets <> [OK]
Common Mistakes:
Using parentheses instead of angle brackets
Adding parentheses after class name
Using square brackets instead of angle brackets
3.
What will be the output of the following C# code?
public class Container<T> {
public T Value;
public Container(T value) { Value = value; }
public override string ToString() => $"Value: {Value}";
}
var intBox = new Container<int>(10);
var strBox = new Container<string>("Hello");
Console.WriteLine(intBox);
Console.WriteLine(strBox);
medium
A. Value: 10
Value: Hello
B. Value: intBox
Value: strBox
C. 10
Hello
D. Compilation error due to missing type constraints
Solution
Step 1: Understand class behavior
The class stores a value of type T and overrides ToString() to print "Value: {Value}".
Step 2: Trace output of Console.WriteLine
intBox.ToString() returns "Value: 10" and strBox.ToString() returns "Value: Hello".
Final Answer:
Value: 10
Value: Hello -> Option A
Quick Check:
ToString override prints value with prefix [OK]
Hint: ToString() shows formatted value, not variable name [OK]
Common Mistakes:
Expecting variable names instead of values
Ignoring ToString() override
Thinking type constraints are required here
4.
Identify the error in this generic class declaration and fix it:
public class Pair<T, U>
{
public T First;
public U Second;
public Pair(T first, U second)
{
First = first;
Second = second;
}
}
var p = new Pair<string>(5, "test");
medium
A. Generic class cannot have two type parameters
B. Constructor parameters should be swapped
C. Missing type arguments when creating instance: use new Pair<int, string>(5, "test")
D. Fields First and Second must be private
Solution
Step 1: Check instance creation syntax
Generic classes require type arguments when instantiated unless using C# 7.1+ with target-typed new.
Step 2: Identify missing type arguments
The code uses new Pair<string>(5, "test") without specifying <int, string>, causing error.
Final Answer:
Missing type arguments when creating instance: use new Pair<int, string>(5, "test") -> Option C
Quick Check:
Generic instantiation needs type args [OK]
Hint: Always specify type parameters when creating generic instances [OK]
Common Mistakes:
Omitting type arguments on new
Thinking generic classes can't have multiple parameters
Changing constructor parameter order unnecessarily
5.
You want to create a generic class Cache<TKey, TValue> that stores key-value pairs and only allows reference types for TValue. Which declaration is correct?
hard
A. public class Cache<TKey, TValue> where TKey : struct { }
B. public class Cache<TKey, TValue> where TValue : struct { }
C. public class Cache<TKey, TValue> where TKey : class { }
D. public class Cache<TKey, TValue> where TValue : class { }
Solution
Step 1: Understand type constraints
To restrict a generic type to reference types, use where Type : class.
Step 2: Apply constraint to TValue
The question requires TValue to be a reference type, so constraint applies to TValue.
Final Answer:
public class Cache<TKey, TValue> where TValue : class { } -> Option D
Quick Check:
Reference type constraint = where TValue : class [OK]
Hint: Use 'where TValue : class' to restrict to reference types [OK]
Common Mistakes:
Applying constraint to wrong type parameter
Using 'struct' instead of 'class' for reference types
Omitting constraints when needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.