Здравствуйте, MadHuman, Вы писали:
MH>Господа, поясните по рекордам...
https://github.com/dotnet/csharplang/blob/master/proposals/csharp-9.0/records.md, не так давно Language Version History
причесали.
На
https://sharplab.io/ уже давно можно пробовать прям с мастера.
MH>я не понял, как же они будут дефайнится..
Вот так вот
MH>public record Person(string FirstName, string LastName);
MH>и как сравниваются?
По ссылке выше есть
The record type includes synthesized == and != operators…
MH>налицо движение к тру структурному типу, то есть главное структура контента.
MH>по логике (если это структурный тип и сравнение структурное) от порядка дефайнинга полей результат не должен зависеть.
MH>зависит ли сравнения от порядка дефайнинга полей в предлагаемых рекордах? если да, почему?
Было бы странно, если бы точка с координатами (5, 7) была бы равна точке с координатами (7, 5)
MH>теперь ещё интереснее, добавляем
MH>public record Person3(string FirstName, string LastName, string MiddleName);
MH>можно ли кастовать Person3 к Person1?
MH>по логике структурных типов, да, тк Person3 по сути более широкий тип чем Person1.
MH>а как в предлагаемых рекордах? и почему?
Рекорды поддерживают наследование:
Records cannot inherit from classes, unless the class is object, and classes cannot inherit from records. Records can inherit from other records.
Разные иерархии рекордов не будут приводиться одна к другой, как и разные иерархии других классов (но можно написать свои методы если нужно).
MH>допустим что можно кастовать, тогда как в таком случае?
MH>…
MH>вот тут уже хз.. если смотреть на них как на рекорды типа Person1, то вроде равны.
MH>но если смотреть полностью на контент, то не равны, тк r3 содержит всё таки доп мембер...
Встроенный механизм реализации сравнения не будет считать рекорды разных типов равными.