|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, дефолтная имплементация интерфейсов настолько жуткая и сложная в использовании вещь, что если и взлетит, то очень ограниченно, в рамках каких-нибудь сложных библиотек ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 12:49 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Осталось добавить поля в интерфейсы чтобы писать дефолтные имплементации. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 13:10 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Интересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 14:51 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Будет требоваться явная реализация? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 15:46 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
WorobjoffОсталось добавить поля в интерфейсы чтобы писать дефолтные имплементации. Будут, правда пока статические. Пишут, что все это нужно для взаимодействия/совместимости с java и ios. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 15:58 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации. в смысле, как? нет никакой коллизии. дефолтную реализацию метода интерфейса можно вызвать только через этот интерфейс. имея ссылку на класс, реализующий некий интерфейс, нельзя вызвать дефолтную реализацию интерфейса. нужно сначала привести ссылку к интерфейсу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 17:50 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
hVosttСон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации. в смысле, как? нет никакой коллизии. дефолтную реализацию метода интерфейса можно вызвать только через этот интерфейс. имея ссылку на класс, реализующий некий интерфейс, нельзя вызвать дефолтную реализацию интерфейса. нужно сначала привести ссылку к интерфейсу. Это и есть коллизия. Ты попробуешь уже написанное приложение перевести на C# 8, у тебя приложение написано с модными нынче UnityContainer, а тут тебе опачки! Не работает больше метод отрезолвленного класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:03 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
WorobjoffЭто и есть коллизия. Ты попробуешь уже написанное приложение перевести на C# 8, у тебя приложение написано с модными нынче UnityContainer, а тут тебе опачки! Не работает больше метод отрезолвленного класса. Не понял в чём коллизия. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 18:05 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
hVosttСон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации. в смысле, как? нет никакой коллизии. дефолтную реализацию метода интерфейса можно вызвать только через этот интерфейс. имея ссылку на класс, реализующий некий интерфейс, нельзя вызвать дефолтную реализацию интерфейса. нужно сначала привести ссылку к интерфейсу.Во-первых, фактически не "интерфейс имеет" дефолтную реализацию, а его члены могут ее иметь или не иметь. Дефолтная реализация члена интерфейса означает, что явно этот член в классе реализовывать не нужно. А во-вторых, если же реализация присутствует, то ссылка, приведенная к интерфейсу, не должна дергать дефолтные реализации членов, иначе по писе пойдут все реализации в классах и их оверрайды. То есть накроется один из столпов ООП - полиморфизм. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 19:45 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
А коллизии действительно нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 19:46 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Вот эта хрень полностью аналогична этой: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Ровно та же "коллизия", которой нет. Просто синтаксический сахар, делающий ненужными некоторые базовые классы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 20:05 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
AntonariyРовно та же "коллизия", которой нет. Просто синтаксический сахар, делающий ненужными некоторые базовые классы. Ну хорошо, а если public class InitialLogger : ILogger1, ILogger2 и в ILogger1, и в ILogger2 есть своя дефолтная реализация void Log(Exception ex), а в самом InitialLogger нет? Вроде как коллизия есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 22:51 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
LR, А вот это вопрос интересный. Фактически дефолтные реализации дают нам фишку с++ - множественное наследование. Какой метод будет дергаться через наследника в с++, если два базовых класса имеют одинаковые методы? Не знаю, на плюсах не писал, но ведь как-то это разруливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 07:09 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Возможно в такой ситуации придется явно реализовать хотя бы один из методов. В этой ситуации приведение к реализованному интерфейсу будет дергать реализацию, а к нереализованному - дефолт. По крайней мере это логично. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 07:17 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
AntonariyLR, А вот это вопрос интересный. Фактически дефолтные реализации дают нам фишку с++ - множественное наследование. Какой метод будет дергаться через наследника в с++, если два базовых класса имеют одинаковые методы? Не знаю, на плюсах не писал, но ведь как-то это разруливается. Разруливаться это будет очень просто : при возникновении коллизии ромба компилятор будет выдавать болт, и вызвать нужный метод можно будет только явным приведением к типу, у которого эта коллизия отсутствует. Проверил, всё так и есть. В общем случае фича именно дефолтных реализаций сильно напоминает EIMI, только без ручного прописывания реализации в имплементоре, так что именно в этой фиче ничего ужасного не вижу. Остальное - пока не знаю. Например, в интерфейсах стали допустимы квалификаторы abstract и virtual. К чему бы это, и для чего - пока представить не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 07:18 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Кстати, с т.з. CIL интерфейс является абстрактным классом, и теоретически может иметь имплементацию, как и абстрактный класс. И новая фича на уровне IL действительно похожа на абстрактный класс - за вычетом наличия конструктора (неявного) у класса (использовался интерфейс из примеров кода по ссылке выше), и директивы newslot virtual у реализованного метода дефолтной имплементации (т.е. теоретически её можно переопределить, только вот как - пока не нашел): C#: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
IL: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 07:35 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныНапример, в интерфейсах стали допустимы квалификаторы abstract и virtual. К чему бы это, и для чего - пока представить не могу.Очевидно, для того, чтобы интерфейсы-наследники были обязаны иметь или могли оверрайдить дефолтные имплементации. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:19 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Главный вопрос во всем этом - как это продать бизнесу? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:20 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации. Сон Веры ПавловныРазруливаться это будет очень просто:Собственно, это та же самая коллизия, что у базовых классов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:32 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
AntonariyСон Веры ПавловныНапример, в интерфейсах стали допустимы квалификаторы abstract и virtual. К чему бы это, и для чего - пока представить не могу.Очевидно, для того, чтобы интерфейсы-наследники были обязаны иметь или могли оверрайдить дефолтные имплементации. Нет: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Убираем override - получаем Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И никаких требований заимлементить в IFoo2 абстрактный Bar от IFoo1. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:55 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
hVosttWorobjoffЭто и есть коллизия. Ты попробуешь уже написанное приложение перевести на C# 8, у тебя приложение написано с модными нынче UnityContainer, а тут тебе опачки! Не работает больше метод отрезолвленного класса. Не понял в чём коллизия. Как я понял из той статьи. Иерархия наследования интерфейсов "ромб". С одной ветки приходит дефолтная реализация метода, с другой объявление, без реализации. Прикладной разработчик резолвит свой класс который наследует низу "ромба". Вызывает метод который он переопределил своем классе. Какой метод будет вызван? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:14 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныAntonariyпропущено... Очевидно, для того, чтобы интерфейсы-наследники были обязаны иметь или могли оверрайдить дефолтные имплементации. Нет: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Убираем override - получаем Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И никаких требований заимлементить в IFoo2 абстрактный Bar от IFoo1.Тогда действительно не ясно, нафига они. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:38 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
WorobjoffКакой метод будет вызван?Никакой, компилятор попросит разработчика избавить его от коллизий. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:41 |
|
что будет с интерфейсами?
|
|||
---|---|---|---|
#18+
Antonariy, Вот такой ромб Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
У меня нет C# 8, поэтому не знаю как оно будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:21 |
|
|
start [/forum/topic.php?fid=20&msg=39856795&tid=1398825]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
156ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 520ms |
0 / 0 |