Readonly structs in C Sharp (C#) - Time & Space Complexity
When working with readonly structs in C#, it's important to understand how their use affects the speed of your program.
We want to see how the time it takes to run code changes as the amount of data grows.
Analyze the time complexity of the following code snippet.
public readonly struct Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y)
{
X = x;
Y = y;
}
public int Distance() => X * X + Y * Y;
}
Point[] points = new Point[1000];
for (int i = 0; i < points.Length; i++)
{
points[i] = new Point(i, i);
}
int totalDistance = 0;
for (int i = 0; i < points.Length; i++)
{
totalDistance += points[i].Distance();
}
This code creates an array of readonly Point structs, initializes them, and then sums their distances.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Two loops each running through the array of points.
- How many times: Each loop runs once for every point, so 1000 times if the array has 1000 points.
As the number of points grows, the time to run the loops grows in the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 20 operations (2 loops x 10) |
| 100 | About 200 operations (2 loops x 100) |
| 1000 | About 2000 operations (2 loops x 1000) |
Pattern observation: The total work grows directly with the number of points. Double the points, double the work.
Time Complexity: O(n)
This means the time to run the code grows in a straight line with the number of points.
[X] Wrong: "Using readonly structs makes the code run faster by reducing the time complexity."
[OK] Correct: Readonly structs help with safety and sometimes memory, but they don't change how many times the code runs through the data.
Understanding how readonly structs affect performance helps you write clear and efficient code, a skill valued in many programming tasks.
"What if we replaced the readonly struct with a class? How would the time complexity change?"
Practice
What is the main purpose of declaring a struct as readonly in C#?
Solution
Step 1: Understand what readonly means for structs
A readonly struct means its fields cannot be changed after the struct is created.Step 2: Compare options with this meaning
Only To prevent modification of its fields after creation matches this behavior by preventing modification after creation.Final Answer:
To prevent modification of its fields after creation -> Option DQuick Check:
Readonly struct = Immutable fields [OK]
- Thinking readonly allows inheritance
- Confusing readonly with mutable structs
- Assuming readonly structs can resize dynamically
Which of the following is the correct way to declare a readonly struct in C#?
?Solution
Step 1: Recall correct syntax for readonly structs
The keywordreadonlycomes beforestructin the declaration.Step 2: Check each option's keyword order
Only readonly struct Point { public int X; public int Y; } placesreadonlybeforestructcorrectly.Final Answer:
readonly struct Point { public int X; public int Y; } -> Option AQuick Check:
Keyword order: readonly struct [OK]
- Placing readonly after struct
- Mixing order of keywords
- Using readonly as a suffix
What will be the output of the following C# code?
readonly struct Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
}
var p = new Point(3, 4);
Console.WriteLine($"X: {p.X}, Y: {p.Y}");Solution
Step 1: Understand readonly struct with get-only properties
The struct has get-only properties set in the constructor, which is allowed.Step 2: Check the constructor and output
The constructor sets X=3 and Y=4, so printing them outputs "X: 3, Y: 4".Final Answer:
X: 3, Y: 4 -> Option AQuick Check:
Constructor sets values correctly [OK]
- Assuming readonly structs cannot have properties
- Thinking constructor cannot set properties
- Expecting runtime errors accessing properties
Identify the error in this code snippet using a readonly struct:
readonly struct Rectangle
{
public int Width;
public int Height;
public void Resize(int w, int h)
{
Width = w;
Height = h;
}
}Solution
Step 1: Understand mutability rules in readonly structs
Readonly structs cannot modify their fields inside instance methods.Step 2: Analyze the Resize method
Resize tries to assign new values to Width and Height fields, which is not allowed.Final Answer:
Cannot assign to fields inside a method of a readonly struct -> Option CQuick Check:
Readonly struct fields are immutable in methods [OK]
- Thinking methods can modify fields in readonly structs
- Assuming missing constructor causes error
- Believing readonly structs cannot have any methods
You want to create a readonly struct Circle that stores a radius and calculates area. Which of these implementations is correct and efficient?
?Solution
Step 1: Check readonly struct with immutable radius
readonly struct Circle { public double Radius { get; } public Circle(double r) => Radius = r; public double Area => Math.PI * Radius * Radius; } uses a readonly struct with a get-only property set in constructor, which is correct.Step 2: Verify area calculation and mutability
Area is a property calculated from Radius, no setters modify Radius, ensuring immutability and efficiency.Final Answer:
readonly struct Circle { public double Radius { get; } public Circle(double r) => Radius = r; public double Area => Math.PI * Radius * Radius; } -> Option BQuick Check:
Immutable radius with calculated area [OK]
- Trying to set fields in readonly struct after creation
- Using mutable fields in readonly structs
- Adding setters that break immutability
Ready to prove it?
Pass the test and this pattern moves unknown
