In C#, a struct is a value type while a class is a reference type. This means that structs are copied by value and typically used for small data structures, while classes are accessed by reference and allow for inheritance and polymorphism. You might choose a struct for a small, immutable data type like a point in 2D space.
In depth
Structs in C# are value types that are stored on the stack, which makes them more memory-efficient for small data types that don't require inheritance, such as coordinates or colors. When you pass a struct to a method, a copy of the struct is made, and any modifications within the method do not affect the original struct. Classes, however, are reference types stored on the heap, meaning they are accessed via references. This allows classes to support features like inheritance and polymorphism, which are essential for more complex data models. Edge cases include dealing with nullable types or ensuring that structs are properly designed to avoid unexpected behavior when passed around in code, especially in performance-critical applications where copy overhead may become significant.
Example scenario
In a game development context, you might use a struct to represent a 2D point or a color because these are small and don't require the overhead of a class. For example, a struct called 'Point' could be created to hold x and y coordinates as integers. Since points are frequently used and immutable, using a struct enhances performance due to stack allocation rather than heap allocation, thereby improving memory efficiency and reducing garbage collection pressure.
Common mistakes
One common mistake developers make is using structs for large data structures, which can lead to performance issues due to the overhead of copying large value types. Another mistake is failing to consider mutability; structs should ideally be immutable to avoid unexpected behavior when passed around. Developers might also overlook the implications of boxing and unboxing when using structs with interfaces, which can lead to unnecessary performance costs.
Follow-up questions
- Can you explain what boxing and unboxing are in C#?
- How would you handle immutability in a struct?
- What are some scenarios where it is better to use a class instead of a struct?
- Can you give an example where using a struct caused a problem in your code?

Want all 2,000 questions in one PDF?
- Short answers, in-depth explanations, common mistakes and follow-ups
- 89 topics, from Beginner to Architect, with a clickable contents list
- 226 extra questions that are not on this website
- Free Bonus Pack: 30-day study plan, behavioral questions, salary scripts
Includes 226 extra questions that are not on this site, plus a free Bonus Pack.
Get both books for $9.99 (save $2.99):
The material stays free to read online. This is the organised, offline, print-ready PDF edition. Secure payment by PayPal; your personal download link is emailed after payment is confirmed. Digital product, no shipping.