|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Всем привет! Помогите, запутался... Имеем: Код: c# 1. 2. 3. 4. 5. 6. 7.
В итоге myClass2 == null. Собственно вопрос, как побороть? Проблема в том, что я в определенном месте получаю в виде object MySuperClass<MyClassX>, где MyClassX - один из классов, наследующих IMyInterface. Зная, что данный интерфейс у них общий, я и хочу получить доступ к телу MySuperClass, но перечислять все возможные проверки типа Код: c# 1. 2.
не хочется. Заранее благодарю за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2013, 21:23 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Alex ShulgВ итоге myClass2 == null. Собственно вопрос, как побороть? А, по-моему, это вообще компилиться не будет. http://msdn.microsoft.com/ru-ru/library/dd469487.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2013, 22:20 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
а зачем тебе делать эти проверки? вызывай интерфейсный метод. вызов будет полиморфным и выполнится нужный код. определеяем интерфейс, классы реализации и обобщенный класс Код: 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.
Пишем метод, который ожидает интерфейс, ему должно быть наплевать какая реализация пришла. Код: c# 1. 2. 3. 4.
Пример использования. Не надо никакой проверки типов, вызовется то, что нужно Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2013, 22:55 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Сорри, видать плохо пояснил, чего хочу. Попробую продемонстрировать на примере Esofter: Код: 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.
Чего-то пока писал, пришла мысль попробовать вообще иначе всё это реализовать... Но, тем не менее, было бы интересно услышать ответ на свой вопрос: возможно ли? как? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 08:13 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Тынц Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 09:05 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Ок, SerP1983 Мысль понятно. Еще усложним? Код: c# 1. 2. 3. 4. 5. 6.
Ошибка Недопустимое изменение. Параметр типа "T" должен быть контравариантно действителен в "ISuperExample<T>.Items". "T" является ковариантный. Как с этим бороться? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:05 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Alex ShulgОк, SerP1983 Мысль понятно. Еще усложним? Код: c# 1. 2. 3. 4. 5. 6.
Ошибка Недопустимое изменение. Параметр типа "T" должен быть контравариантно действителен в "ISuperExample<T>.Items". "T" является ковариантный. Как с этим бороться? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:35 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
Во вам неймется, separated interface рулит Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:35 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
pation Точно, сам допёр :) Всем спасибо! "Одна голова - хорошо, а две/три - лучше" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:47 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
А я тут стараюсь: "здесь параметр именно object !!!" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:49 |
|
Преобразовать MySuperClass<class> в MySuperClass<interface>
|
|||
---|---|---|---|
#18+
не, ты натолкнул меня на мысль, что в исходном интерфейсе (где <out T>) надо создать заглушку метода, реализовать ее в основном интерфейсе и из кода вызывать эту заглушку, не пытаясь получить доступа к полям/методам интерфейса... Во! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:02 |
|
|
start [/forum/topic.php?fid=20&msg=38189338&tid=1405002]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 126ms |
0 / 0 |