|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Здравствуйте! Есть следующая логика. Есть фигура. У этой фигуры есть кривые. У каждой кривой есть точки. У каждой точки есть свои координаты. Написал код, где используются интерфейсы. Код почти готов, только в одном месте ошибка появляется. C# Код: 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. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 19:29 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Что мешает объявить Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:17 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Shocker.Pro Что мешает объявить Код: c# 1.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 21:10 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
да, ну и соответствующим образом изменить объявление типа поля ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 23:41 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Shocker.Pro, Получилось. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 09:56 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
надо свойство завести, а поле инкапсулировать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 11:24 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
В методе Main нужно написать так: Код: c# 1.
На скриншоте в списке методов отсутствует метод AddСurve. Если написать public Код: c# 1. 2. 3. 4.
то выдает ошибку: "Модификатор public не допустим для этого элемента". Почему так? Как правильно написать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 11:42 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Если добавить такую запись Код: c# 1. 2. 3. 4. 5. 6.
то метод AddСurve1 (не AddСurve ) появляется в списке методов. См. скриншот. Я правильно понимаю, что в данном случае не обойтись без дополнительного метода AddСurve1 ? Или можно было сделать по проще, то есть все в методе IFigureModification.AddСurve реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 11:44 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
читайте, просвещайтесь :D https://metanit.com/sharp/tutorial/3.44.php ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 11:46 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Roman Mejtes надо свойство завести, а поле инкапсулировать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 11:56 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
При EIMI вызов метода возможен только при явном кастинге к эксплицитно реализованному интерфейсу. В коде экземпляр Figure нужно явно кастить к IFigureModification. Отдельный вопрос, занафига тут потребовалось применять EIMI. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 12:09 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Roman Mejtes читайте, просвещайтесь :D https://metanit.com/sharp/tutorial/3.44.php Еще такой вариант: Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 12:47 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
ferzmikk то выдает ошибку: "Модификатор public не допустим для этого элемента". Это явная (explicit) реализация интерфейса и у неё не может быть модификатора доступа. Де-факто такой метод является приватным. С тем отличием, что его все-таки можно вызвать из другого класса (в том числе и производного), приведя ссылку на объект к ссылке на интерфейс. Но, вообще говоря, интерфейсы так использовать не стоит по идеологическим соображениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 17:14 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
fkthat Но, вообще говоря, интерфейсы так использовать не стоит по идеологическим соображениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 20:12 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
ferzmikk fkthat Но, вообще говоря, интерфейсы так использовать не стоит по идеологическим соображениям. Нет я имею в виду что-то типа IPoint или ICurve. Как бы в двух словах объяснить, наследование это "Я есть что-то", а интерфейс это "Я умею что-то" или "Со мной можно сделать то-то". "Собака это млекопитающее", "Кошка это млекопитающее" - наследование. А "Собака кусается" и "Кошка кусается" это уже интерфейс - надо исходить из этого. Вот, например в твоей реализации можно создать класс, который будет одновременно и точкой, и кривой, и фигурой из кривых, что смысла никакого не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 21:38 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
ferzmikk Вы имеете ввиду вызов интерфейсного метода? Интерфесный метод как раз норм. Есть люди которые даже считают, что все реализации интерфейсов должны быть explicit. Я даже с этим согласен, но, это просто довольно таки непривычно так делать, поэтому сам не делаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 21:49 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
fkthat Есть люди которые даже считают, что все реализации интерфейсов должны быть explicit. Интересно было бы послушать их аргументацию. Тот же Рихтер рекомендует сто раз подумать, прежде чем без необходимых причин (совпадение сигнатур методов) прибегать к EIMI. У майкрософта в исходниках я EIMI встречал тоже только в таких случаях. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 06:01 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Интересно было бы послушать их аргументацию. Ну, я бы, например, как аргумент в пользу explicit мог бы привести принцип "dependency inversion" из SOLID - то что любой класс/объект не должен использоваться напрямую, а только через свои абстрактные контракты. Понятно, что explicit не мешает этот принцип нарушать (в конце-концов всегда класс можно привести к своему интерфейсу), но, типа, как бы, подталкивает к его соблюдению. Сон Веры Павловны Тот же Рихтер рекомендует сто раз подумать, прежде чем без необходимых причин (совпадение сигнатур методов) прибегать к EIMI А где Рихтер такое писал, кстати? Я у него не припомню, чтобы встречал такое, что прямо так explicit это гамно и костыль. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 07:59 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
fkthat А где Рихтер такое писал, кстати? CLR via C# Глава 13. Интерфейсы C# ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 08:30 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Рихтерк явной реализации интерфейсных методов нужно прибегать с осторожностью. Когда разработчики впервые узнали о EIMI, многие посчитали это отличной новостью и стали пытаться выполнять явную реализацию интерфейсных методов везде, где только можно. Не попадайтесь на эту удочку! Явная реализация интерфейсных методов полезна в лишь некоторых случаях, но ее следует избегать везде, где можно обойтись другими средствами. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 08:32 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Изопропил, Да, заглянул, нашел. Я её просто сразу главы с 25 читал. Но надо сказать, что аргументы, что он приводит против, тоже так-сяк себе. Я сам-то EIMI не использую без крайней нужды, но, сказал бы просто, что я не вижу как каких-либо особых аргументов "за", так и особых аргументов "против". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 10:00 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
fkthat, да мало что кто то что то сказал - это равносильно тому что - не пользуйтесь готовыми библиотеками, пишите все сами ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 11:13 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
fkthat так и особых аргументов "против" Особый аргумент против - нужно было бы писать постоянный явный кастинг. Представьте себе, что так оно и было бы: Код: c# 1. 2. 3. 4. 5.
- я бы проклял автора идеи повсеместного EIMI страшными словами. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 12:02 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Особый аргумент против - нужно было бы писать постоянный явный кастинг. Представьте себе, что так оно и было бы: Код: c# 1. 2. 3. 4. 5.
- я бы проклял автора идеи повсеместного EIMI страшными словами. Если следовать Dependency Inversion то ссылки практически на любые объекты присутствуют в коде только как ссылки на их интерфейсы, так что кастинг не нужен. Кстати, попробуй из своего кода убрать кастинги - возможно удивишься тому что все отлично соберется :) Сон Веры Павловны я бы проклял автора идеи повсеместного EIMI страшными словами. Я везде его использовать не считаю прямо-таки суперхорошей идеей, но, если бы, вдруг, на проекте всей команде в голову взбрело так делать, то меня бы это не сильно уж и напрягло и детских истерик я бы устраивать из-за этого не стал бы точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 13:11 |
|
Не удается преобразовать
|
|||
---|---|---|---|
#18+
fkthat Кстати, попробуй из своего кода убрать кастинги - возможно удивишься тому что все отлично соберется :) Ну а с чего бы не собраться - сейчас же все приведенные в коде интерфейсы реализованы неявно. Это была просто гипотетическая иллюстрация возможной ситуации. fkthat если бы, вдруг, на проекте всей команде в голову взбрело так делать, то меня бы это не сильно уж и напрягло и детских истерик я бы устраивать из-за этого не стал бы точно. Для того, чтобы это не напрягало, архитектура должна быть спроектирована соотвествующим образом. А если тебе просто дают экземпляр какого-то объекта, и для того, чтобы вызвать нужный метод, надо а) знать список всех интерфейсов, которые имплементирует этот объект; 2) знать интерфейс, в котором объявлен нужный метод; 3) сделать тайпкастинг к этому интерфейсу. Примерно то же самое, что работать просто с object, угадывая, что там на самом деле. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 14:25 |
|
|
start [/forum/topic.php?fid=20&msg=39925621&tid=1398620]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
197ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 237ms |
total: | 541ms |
0 / 0 |