Для реализации Traits требуется поддержка статических методов в интерфейсах.
Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах?
Насколько сложно их добавить?
И нужно-ли?
Мажет быть есть альтернативные способы добиться аналогичного результата?
Напимер может быть достаточно static class'а?
Здравствуйте, Denom, Вы писали:
D>Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах? D>Насколько сложно их добавить?
По крайней мере, CLR их поддерживает.
А предполагается ли, что они должны наследоваться? Если да, то это придется эмулировать вручную и разрешать конфликты из-за множественного наследования.
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, Denom, Вы писали:
D>>Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах? D>>Насколько сложно их добавить?
N>По крайней мере, CLR их поддерживает. N>А предполагается ли, что они должны наследоваться? Если да, то это придется эмулировать вручную и разрешать конфликты из-за множественного наследования.
сейчай мне кажется что классы созданные с использованием traits являются финальными тобишь sealed.
Здравствуйте, Denom, Вы писали:
D>Для реализации Traits требуется поддержка статических методов в интерфейсах. D>Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах?
Нет. И не уверен, что это нужно делать. Хотя конечно все что позволяет сделать CLR (и System.Reflection.Emit), сделать можно.
D>Насколько сложно их добавить?
Как и любой расширение языка — это требует изменения парсера, типизатора и генератора мсила. В принципе ничего особо заоблочног в это нет, но как и любая работа это требует времени.
D>И нужно-ли? D>Мажет быть есть альтернативные способы добиться аналогичного результата? D>Напимер может быть достаточно static class'а?
Мне кажется, что достаточно. Более того может и без них можно обойтись. Ведь код можно просто добавлять к классу реализующему трэйт.
Собственно в компиляторе можно наблюдать макрос использующий технику похожую на трэйтсы — это макрос ManagerAccess (см. macros/compiler.n и использование макроса в других файлах). Он добавляет определенный код к классам.
В принципе трэйтсы можно реализовать как полноценную фичу языка, а можно попробовать залудить ее в виде макроса.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>В прочем подкрутить компилятор так чтобы он понимал первый вариант синтаксиса и переписывал его во второй задача на пять минут.
А разве в примере с аспектами не через синтаксис для макросов сделано?
Я правда так и не нашел пример использования.