Variables, Scoping, const vs readonly & Primary Constructors
1Concept
const values are evaluated at compile time and inlined. readonly fields can only be assigned during initialization or inside constructors. C# 12+ supports Primary Constructors directly on classes and structs (class Service(ILogger logger)).
2Architecture Diagram
const double PI = 3.14159; // Inlined directly by Roslyn compiler at compile-time readonly DateTime StartedAt; // Evaluated at runtime during constructor initialization
3Code Example
Stage 0 Language Foundations
using System;
// Primary Constructor in C# 12/13
public class ApiGateway(string serviceName, int port)
{
private readonly DateTime _startTime = DateTime.UtcNow;
public void PrintStatus()
{
Console.WriteLine($"Gateway [{serviceName}] running on Port {port} (Started: {_startTime:HH:mm:ss})");
}
}
class Program
{
static void Main()
{
var gateway = new ApiGateway("Authentication-Service", 5001);
gateway.PrintStatus();
}
}4Expected Output
Gateway [Authentication-Service] running on Port 5001 (Started: 08:30:00)
5Key Takeaways
- ✓Use const only for immutable primitives whose values never change across versions.
- ✓Use readonly for runtime immutability and dependency injection fields.
- ✓Primary constructors eliminate repetitive constructor boilerplate field assignments.