C#9から登場したrecordで型が定義できるようになって、record、class、structなどよく分からなくなってきたので、いろいろ比較しつつ整理してみました。
class | struct | record | |
---|---|---|---|
参照型 or 値型 | 参照型 | 値型 | 参照型 |
継承 | できる | できない | できる |
Equals() | 参照先の比較 | メンバの比較 | メンバ、型の比較 |
ToString() | 型名を表示 | 型名を表示 | プロパティ一覧を表示 |
Equals()
recordのEquals()はメンバの比較に加えて型も比較しています。
recordで型を2つ定義し、各インスタンスをEquals()で比較してみました。 片方は継承をしていて、メンバは同じにしてあります。
record RecordBook(int Id, string Name); record RecordTravelBook(int Id, string Name) : RecordBook(Id, Name);
var book1 = new RecordBook(1, "東海ウォーカー"); var book2 = new RecordTravelBook(1, "東海ウォーカー"); Console.WriteLine(book1 == book2); // False
この場合はメンバの値は同じだけど型が違うのでFalseになりました。
ToString()
recordのToString()はいい感じにプロパティ一覧を表示してくれました。
var book1 = new RecordBook { Id = 1, Name = "ファミ通" }; var book2 = new RecordTravelBook { Id = 2, Name = "東海ウォーカー", Area = "東海" }; Console.WriteLine(book1.ToString()); Console.WriteLine(book2.ToString());