23.12.2020, 23:09 | #10 |
Участник
|
Гуглим:
Ковариа́нтность и контравариа́нтность[1] в программировании — способы переноса наследования типов на производные[2] от них типы — контейнеры, обобщённые типы, делегаты и т. п. Термины произошли от аналогичных понятий теории категорий «ковариантный» и «контравариантный функтор». Цитата:
Цитата:
Вот хочется проверить. У кого под руками есть 2012, можете проверить, что поддерживается именно ковариантность а не произвольное переопределение. Т.е. что контроллируется что метод производного класса обязан возвращать именно подкласс результата переопределенного метода, а не вообще все, что угодно, лишь бы оно было классом (назовем это пофиг-вариантностью) Цитата:
в ax2012 с какого-то перепуга разработчики сделали типы инвариантными как в C# 2.0. причем очень жестко.
из-за этого нельзя уточнять тип в параметрах методов и в возвращаемых значениях. X++ изначально это статически типизированный язык натянутый на не очень строго типизированный рантайм. MyClass x = otherValue; x.myMethod(a); Будет работать всегда, когда у otherValue есть метод совпадающий по имени и имеющий один обязательный параметр. Не важно, otherValue наследуется от MyClass или нет. JFYI, Параметры методов, наоборот, должны быть контровариантными см. LSP. Цитата:
были слухи, что в ax2012 делали перегрузку методов и генерики.
но ни перегрузки, ни генериков в аксапту так и не завезли. На уровне IL опциональные параметры компилируются в перегрузки. Цитата:
в d365fo, насколько я помню, типы снова стали ковариантными.
после того, как в C# 4.0+ добавили ковариантность для генериков Цитата:
сделано "как в c#" людьми, которые кроме c# ничего не знают.
Последний раз редактировалось belugin; 23.12.2020 в 23:21. |
|
Теги |
ax2012, ax2012r3, тернарный оператор |
|
|