« Record » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
Ligne 53 : | Ligne 53 : | ||
Two record objects are equal if they are of the same type and store the same values. | Two record objects are equal if they are of the same type and store the same values. | ||
<kode lang='cs'> | <kode lang='cs'> | ||
string[] phoneNumbers = [ "06-10-20-30-40" ]; | string[] phoneNumbers = [ "06-10-20-30-40" ]; | ||
Person person1 = new("Nicolas", phoneNumbers); | Person person1 = new("Nicolas", phoneNumbers); | ||
Person person2 = new(" | Person person2 = new("Nicolas", phoneNumbers); | ||
Console.WriteLine(person1 == person2); // | Console.WriteLine(person1 == person2); // true | ||
Person person1 = new("Nicolas", [ "06-10-20-30-40" ]); | |||
Person person2 = new("Nicolas", [ "06-10-20-30-40" ]); | |||
Console.WriteLine(person1 == person2); // false | |||
public record Person(string Name, string[] PhoneNumbers); | |||
</kode> | </kode> |
Version du 9 août 2024 à 13:54
Links
Definition
Built-in functionality for encapsulating immutable data.
C# 10 allows the record class syntax as a synonym to clarify a reference type, and record struct to define a value type.
Primary constructor
When you declare a primary constructor on a record, the compiler generates public properties for the primary constructor parameters.
public record Person(string FirstName, string LastName); // with the generated properties it is equivalent to public record Person { public required string FirstName { get; init; } public required string LastName { get; init; } }; // record struct value type with immutable properties public readonly record struct Point(double X, double Y); // equivalent to public record struct Point { public double X { get; init; } public double Y { get; init; } } // record struct value type with mutable properties public record struct Point(double X, double Y); // equivalent to public record struct Point { public double X { get; set; } public double Y { get; set; } } |
Immutability
Immutability means the data of the record don't change after its creation.
It is useful when you need thread-safe data-centric types or expect hash codes remaining the sames.
However, the data that a reference-type property refers to can be changed:
public record Person(string Name, string[] PhoneNumbers); Person person = new("Nicolas", new string[1] { "06-10-20-30-40" }); // the PhoneNumbers array is immutable, but the string in the array are mutable person.PhoneNumbers[0] = "06-11-22-33-44"; |
Value equality
Two record objects are equal if they are of the same type and store the same values.
string[] phoneNumbers = [ "06-10-20-30-40" ]; Person person1 = new("Nicolas", phoneNumbers); Person person2 = new("Nicolas", phoneNumbers); Console.WriteLine(person1 == person2); // true Person person1 = new("Nicolas", [ "06-10-20-30-40" ]); Person person2 = new("Nicolas", [ "06-10-20-30-40" ]); Console.WriteLine(person1 == person2); // false public record Person(string Name, string[] PhoneNumbers); |