Records and Modern Types
Init Properties
Init-only properties are assigned during object creation.
init property
An `init` property can be set in an object initializer and then treated as fixed.
Init Properties
InitProperties.cs
Replay: real traced execution (multi-file project)
using System;
class Profile
{
public string Name { get; init; } = "";
public int Age { get; init; }
public override string ToString()
{
return Name + ":" + Age;
}
}
class Program
{
static void Main()
{
int age = 30;
Profile profile = new Profile { Name = "Dana", Age = age };
string summary = profile.Name + ":" + profile.Age;
Console.WriteLine($"age={age}");
Console.WriteLine($"summary={summary}");
}
}
using System;
class Profile
{
public string Name { get; init; } = "";
public int Age { get; init; }
public override string ToString()
{
return Name + ":" + Age;
}
}
class Program
{
static void Main()
{
int age = 18;
Profile profile = new Profile { Name = "Dana", Age = age };
string summary = profile.Name + ":" + profile.Age;
Console.WriteLine($"age={age}");
Console.WriteLine($"summary={summary}");
}
}
using System;
class Profile
{
public string Name { get; init; } = "";
public int Age { get; init; }
public override string ToString()
{
return Name + ":" + Age;
}
}
class Program
{
static void Main()
{
int age = 45;
Profile profile = new Profile { Name = "Dana", Age = age };
string summary = profile.Name + ":" + profile.Age;
Console.WriteLine($"age={age}");
Console.WriteLine($"summary={summary}");
}
}
age ← 30, profile ← Dana:30, summary ← Dana:30
15{16 static void Main()17 {18 int age→ 30 = 30; //@age=18, 4519 Profile profile→ Dana:30 = new Profile { Name = "Dana", Age = age };20 string summary→ Dana:30 = profile.NameDana + ":" + profile.Age30;2122 Console.WriteLine($"age={age30}");23 Console.WriteLine($"summary={summaryDana:30}");24 }outputage=30 summary=Dana:30
age ← 18, profile ← Dana:18, summary ← Dana:18
15{16 static void Main()17 {18 int age→ 18 = 18;19 Profile profile→ Dana:18 = new Profile { Name = "Dana", Age = age };20 string summary→ Dana:18 = profile.NameDana + ":" + profile.Age18;2122 Console.WriteLine($"age={age18}");23 Console.WriteLine($"summary={summaryDana:18}");24 }outputage=18 summary=Dana:18
age ← 45, profile ← Dana:45, summary ← Dana:45
15{16 static void Main()17 {18 int age→ 45 = 45;19 Profile profile→ Dana:45 = new Profile { Name = "Dana", Age = age };20 string summary→ Dana:45 = profile.NameDana + ":" + profile.Age45;2122 Console.WriteLine($"age={age45}");23 Console.WriteLine($"summary={summaryDana:45}");24 }outputage=45 summary=Dana:45