Constants and readonly fields in C Sharp (C#) - Time & Space Complexity
Let's see how using constants and readonly fields affects how fast a program runs.
We want to know if these affect the number of steps the program takes as input grows.
Analyze the time complexity of the following code snippet.
public class Example {
public const int MaxValue = 100;
public readonly int MinValue;
public Example(int min) {
MinValue = min;
}
public int Multiply(int x) {
return x * MaxValue;
}
}
This code defines a constant and a readonly field, then uses the constant in a method.
Look for any loops or repeated steps that grow with input size.
- Primary operation: A single multiplication using a constant value.
- How many times: Each call to Multiply does one multiplication, no loops involved.
The number of steps stays the same no matter how big the input number is.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 multiplication |
| 100 | 1 multiplication |
| 1000 | 1 multiplication |
Pattern observation: The work does not increase as input grows; it stays constant.
Time Complexity: O(1)
This means the time to run does not change with input size; it stays quick and steady.
[X] Wrong: "Using constants or readonly fields makes the program faster as input grows."
[OK] Correct: Constants and readonly fields do not change how many steps the program takes; they just hold fixed values. The speed depends on the operations done, not on these fixed values themselves.
Understanding how constants and readonly fields behave helps you explain code efficiency clearly and confidently in interviews.
"What if the Multiply method used a loop that runs MinValue times instead of a single multiplication? How would the time complexity change?"
Practice
const and readonly fields in C#?Solution
Step 1: Understand
constbehaviorconstfields are fixed at compile time and cannot be changed later.Step 2: Understand
readonlybehaviorreadonlyfields can be assigned once at runtime, usually in a constructor, and then cannot change.Final Answer:
constvalues are set at compile time and cannot change;readonlyvalues can be set at runtime but only once. -> Option CQuick Check:
constfixed at compile,readonlyset once at runtime [OK]
- Thinking readonly can be changed multiple times
- Confusing when const values are set
- Assuming const can be assigned in constructors
MaxValue with value 100 in C#?Solution
Step 1: Check correct syntax for constant declaration
In C#,constmust be followed by type, then name and value, likeconst int MaxValue = 100;.Step 2: Identify incorrect options
readonlyrequires a type and cannot be declared like a constant;int constis invalid syntax in C#;static readonlyrequires a type and cannot omit it.Final Answer:
const int MaxValue = 100; -> Option BQuick Check:
const syntax = const type name = value; [OK]
- Using 'int const' instead of 'const int'
- Omitting type in readonly declaration
- Confusing const and readonly syntax
class Test {
public readonly int Value;
public Test(int val) {
Value = val;
}
}
class Program {
static void Main() {
var t = new Test(10);
Console.WriteLine(t.Value);
}
}Solution
Step 1: Understand readonly assignment in constructor
ThereadonlyfieldValueis assigned in the constructor withval, which is 10.Step 2: Check output of Console.WriteLine
The program prints the assigned value ofValue, which is 10.Final Answer:
10 -> Option AQuick Check:
readonly set in constructor prints assigned value [OK]
- Assuming readonly defaults to 0 if assigned in constructor
- Thinking readonly cannot be assigned in constructor
- Expecting compilation or runtime errors
class Sample {
public const int Number;
public Sample() {
Number = 5;
}
}Solution
Step 1: Check const assignment rules
constfields must be assigned a value when declared and cannot be assigned later.Step 2: Analyze code assignment
The code tries to assignNumber = 5;inside the constructor, which is invalid forconst.Final Answer:
Cannot assign a value to a const field outside declaration. -> Option AQuick Check:
const must be assigned only at declaration [OK]
- Trying to assign const in constructor
- Confusing const with readonly assignment rules
- Assuming no error in code
Solution
Step 1: Assign fixed tax rate with const
The tax rate never changes, soconstis appropriate forTaxRate.Step 2: Assign discount rate once at object creation
The discount rate can be set once when the object is created, soreadonlyis suitable forDiscountRate.Step 3: Eliminate incorrect options
public readonly double TaxRate = 0.15; public const double DiscountRate; swaps const and readonly incorrectly; public static double TaxRate = 0.15; public double DiscountRate; uses mutable fields; public double TaxRate = 0.15; public readonly double DiscountRate; uses non-const for tax rate.Final Answer:
public const double TaxRate = 0.15; public readonly double DiscountRate; -> Option DQuick Check:
const fixed forever, readonly set once at creation [OK]
- Using readonly for fixed values
- Using const for values set at runtime
- Not understanding when to use static
Ready to prove it?
Pass the test and this pattern moves unknown
