Re: и ещё про рекорды..
От: _FRED_ Черногория
Дата: 15.09.20 16:43
Оценка: +2
Здравствуйте, 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 содержит всё таки доп мембер...

Встроенный механизм реализации сравнения не будет считать рекорды разных типов равными.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.