| Type | Reference Type | Reference Type (since C# 10, can be record struct) | Value Type |
| Memory Allocation | Typically allocated on the heap. | Typically allocated on the heap. | Typically allocated on the stack (or heap if used as part of a class or array) |
| Default Constructor | Can have a parameterless constructor, and can be explicitly defined. | Implicit parameterless constructor is not allowed; parameters are required. | Parameterless constructor is provided by default and initializes all fields to default values. |
| Inheritance | Supports inheritance (can inherit from other classes and be inherited). | Supports inheritance (can inherit from other records but not from classes). | Does not support inheritance (cannot inherit from or be inherited by other types). |
| Equality | Uses reference equality by default, can override Equals and GetHashCode for value-based equality. | Uses value-based equality by default (based on all properties). Automatically implements Equals, GetHashCode, and ToString. | Uses value-based equality by default (based on all fields). Automatically implements Equals, GetHashCode, and ToString. |
| Mutability | Mutable by default; properties can be changed after object creation. | Immutable by default; properties are readonly and set via constructor. | Immutable by default (properties are typically readonly and initialized in the constructor). |
| Deconstruction | Not supported by default. | Supports deconstruction with tuple-like syntax. | Supports deconstruction with tuple-like syntax. |
| Constructor | Can have multiple constructors with various parameters. | Primary constructor is defined with positional parameters; can also have additional constructors. | Constructor must initialize all fields; no parameterless constructor allowed unless provided by the compiler. |
| Default Values | Fields initialized to default values if not explicitly set. | Properties are initialized via the constructor. | Fields are initialized to default values (e.g., 0, null). |
| Use Cases | Used for complex objects with behavior and mutable state. | Ideal for immutable data models, DTOs, and scenarios where value-based equality is important. | Ideal for lightweight, immutable data structures where copying and stack allocation are beneficial. |