|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Конструкция не компилируется: 'Foo.Creator' cannot implement 'IHasCreator.Creator' because it does not have the matching return type of 'IUser' Почему так? Что я недопонял? Можно ли тут что-то сделать, с учетом того, что код класса Foo я менять не могу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 00:21 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProМожно ли тут что-то сделать, с учетом того, что код класса Foo я менять не могу? кастрировать автора класса Foo ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 00:42 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Изопропилкастрировать автора класса Fooсложно, это кодогенератор ))) Попробую вот так выйти из положения: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
по крайней мере компиляция проходит (забыл сказать, Foo объявлен как partial, и интерфейс ему приписываю я сам) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 00:46 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProИзопропилкастрировать автора класса Fooсложно, это кодогенератор ))) Попробую вот так выйти из положения: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
по крайней мере компиляция проходит (забыл сказать, Foo объявлен как partial, и интерфейс ему приписываю я сам)дык пропишите тогда и явную реализацию интерфейса ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 06:28 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
не, я могу только вот так сделать: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 09:01 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProПочему так? Что я недопонял?и он еще спрашивает. в интерфейсе свойство возвращает тип IUser, а в реализации ты кодогенератор подсовывает User. ничо, что это разные типы, на минуточку? а интерфейс определяет тип ЖОСКА! что за говно у тебя занимается генерацией кода, что ты не можешь на него влиять? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:11 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariyи он еще спрашивает. в интерфейсе свойство возвращает тип IUser, а в реализации ты кодогенератор подсовывает User. ничо, что это разные типы, на минуточку? а интерфейс определяет тип ЖОСКА!Поскольку User реализует IUser, не понимаю, почему бы это не разрешить. Antonariyчто за говно у тебя занимается генерацией кода, что ты не можешь на него влиять?EF в режиме DBFirst ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:17 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyи он еще спрашивает. в интерфейсе свойство возвращает тип IUser, а в реализации ты кодогенератор подсовывает User. ничо, что это разные типы, на минуточку? а интерфейс определяет тип ЖОСКА!Поскольку User реализует IUser, не понимаю, почему бы это не разрешить.Не понимаешь, потому что ты тупо ниасилил интерфейсы. Еще раз: User и IUser это РАЗНЫЕ типы. Не один и тот же тип, как требует смысл интерфейсов, а два отдельных типа. С разными названиями. И пофиг, какие там у них взаимные отношения, интерфейс IHasCreator это не колышет, ему нужен User, и точка. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:36 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariy, User может быть неявно приведен к IUser Посему не понимаю, какое техническое или логическое ограничение может быть на такое использование. Обычно на подобные ограничения существуют причины. Я могу принять это как данность, но если буду знать причину, будет легче жить ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:44 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProEF в режиме DBFirstтак он все правильно делает. непонятно тогда, откуда это взялось? он этим не занимается. Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:45 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariyинтерфейс IHasCreator это не колышет, ему нужен User, и точка. ты хотел сказать IUser наварное. вообще зачем тогда городить интерфейсы? получается в данном случае, что IUser вообще нафиг не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:48 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariy, User может быть неявно приведен к IUser Посему не понимаю, какое техническое или логическое ограничение может быть на такое использование. Обычно на подобные ограничения существуют причины. Я могу принять это как данность, но если буду знать причину, будет легче жить потому, что в интерфейсе определено поле с интерфейсом IUser, а это значит, что там может возвращаться любой класс наследующий интерфейс IUser, а не только User. проще говоря интерфейс предполагает в поле Creator любой класс наследующий IUser, а класс наследник этого интерфейса, что только 1 класс может быть возвращен. То есть, если я создам класс на базе интерфейса IUser отличный от класс User, как будет происходить преобразование типа? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:52 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AntonariyShocker.ProEF в режиме DBFirstтак он все правильно делает. непонятно тогда, откуда это взялось? он этим не занимается. Код: c# 1.
Это я ему придаю (см. выше), чтобы некий библиотечный код, не имеющий зависимости от проекта, где находится EF, мог делать некоторые типовые действия с его объектами через интерфейсы, объявленные в библиотеке. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:52 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariy, User может быть неявно приведен к IUser Посему не понимаю, какое техническое или логическое ограничение может быть на такое использование. Обычно на подобные ограничения существуют причины. Я могу принять это как данность, но если буду знать причину, будет легче жить Ты тупой? причина в том, что это данность. Интерфейсы работают так и никак иначе. В реализации ДОЛЖЕН использоваться указанный в интерфейсе тип, а никакой не производный или первообразный. Именно этот смысл вложен в понятие "интерфейс". А компилятор, исполняя этот смысл, просто сравнивает названия типов и не лезет в дебри их взаимосвязей. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:54 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Roman MejtesAntonariyинтерфейс IHasCreator это не колышет, ему нужен User, и точка. ты хотел сказать IUser наварное.да ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 10:56 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariy, ну, взять для примера тот факт, что компилятор вообще не парится и скомпилирует такой код. я получаю объект и привожу его к типу IHasCreator. У объекта есть поле Creator типа IUser, я создаю класс Ololo : IUser {} на базе IUser и присваиваю его экземпляр этому полю. Думаю после такой манипуляции (если бы такое вообще было возможно) я бы получил исключение :) из института сразу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 11:00 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyпропущено... так он все правильно делает. непонятно тогда, откуда это взялось? он этим не занимается. Код: c# 1.
Это я ему придаю (см. выше)А еще ты не осилил слово partial. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
и будет щастье ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 11:14 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
а хотя я кажется тупанул, ты же хочешь не просто вернуть User, а задекларировать его. слово partial тут не спасет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 11:18 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
просто без него все равно не взлетело бы, но из-за другой ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 11:21 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AntonariyА еще ты не осилил слово partial.попробуй осилить, все, что я пишу, а не через одно 17664775 Я уже написал способ, которым я могу решить свою задачу 17664287 , далее хотел только разобраться в причинах, Roman Mejtes объяснил (благодарю покорнейше), а ты продолжаешь что-то свое обсасывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 11:22 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
да, увлекся ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 11:25 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Roman Mejtes, С пропертями понятно. А вот почему аналогичный код с методами не компилируется? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Тут-то точно типы совместимы на выходе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:00 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезRoman Mejtes, С пропертями понятно. А вот почему аналогичный код с методами не компилируется? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Тут-то точно типы совместимы на выходе.еще один... тип должен бы не "совместимым", а ТЕМ ЖЕ САМЫМ и не важно, свойство это, метод или параметр метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:07 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез, Код: c# 1. 2. 3. 4. 5. 6. 7.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:07 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Упс, опоздал... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:07 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AxeleronДиез, Код: c# 1. 2. 3. 4. 5. 6. 7.
?это не ошибка, это искреннее желание, чтобы работало именно так - public User. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:12 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariy, В случае со свойством - был приведен конкретный пример 17665356 , когда контракт нарушается. Для метода такой пример не годится - User подходит при любом использовании (return-типы ковариантнты - нет?). Тогда зачем ограничивать возврат конкретным типом, если подходит любой наследник? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:27 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез, потому что "пропертя" это на самом деле два обычных метода, а значит и суть дела это не меняет :) Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:30 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Roman MejtesДиез, потому что "пропертя" это на самом деле два обычных метода, а значит и суть дела это не меняет :) Код: c# 1. 2.
В случае со свойством нарушается как раз контракт set-метода, и это понятно. get-метод допускает возврат User вместо IUser в любых случаях. Просто метод IUset creator() - тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:35 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезAntonariy, В случае со свойством - был приведен конкретный пример 17665356 , когда контракт нарушается. Для метода такой пример не годится - User подходит при любом использовании (return-типы ковариантнты - нет?). Тогда зачем ограничивать возврат конкретным типом, если подходит любой наследник?ты реально не догоняешь, что все эти слова мимо кассы? интерфейс это соглашение на уровне декларации - что вот в этом месте должно быть написано слово IUser, а не User. все обстоятельства за рамками этого факта не имеют ни малейшего значения. все эти вопросы "зачем" из разряда попыток оспорить уголовный кодекс. не нравятся или не понимаешь правил ООП - пиши на js или асемблере. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:42 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AntonariyДиезAntonariy, В случае со свойством - был приведен конкретный пример 17665356 , когда контракт нарушается. Для метода такой пример не годится - User подходит при любом использовании (return-типы ковариантнты - нет?). Тогда зачем ограничивать возврат конкретным типом, если подходит любой наследник?ты реально не догоняешь, что все эти слова мимо кассы? интерфейс это соглашение на уровне декларации - что вот в этом месте должно быть написано слово IUser, а не User. все обстоятельства за рамками этого факта не имеют ни малейшего значения. все эти вопросы "зачем" из разряда попыток оспорить уголовный кодекс. не нравятся или не понимаешь правил ООП - пиши на js или асемблере. Давайте без перехода на личности, ок? :) Насчет "понимания принципов ООП" - объясните тогда, плз, почему в Java аналогичный фокус работает? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Компилируется без проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:55 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез, Пойми, что интерфейсам абсолютно по барабану, что вот этот его член, являющийся интерфейсом, имплементирован в том или ином классе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:22 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
самый точный ответ будет: "Потому что" :) потому что, так решили разрабы в МС и как по мне такое решение вполне логично и верно. если так сильно прижало, можно наследовать интерфейс в абстрактном классе, а потом через new переопределить этот метод на метод с типом User и радоваться жизни ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:24 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез Давайте без перехода на личности, ок? :)пока что я про личность ничего не сказал. Диез почему в Java аналогичный фокус работает?@Override - это называется аналогичный? без него же не компилится, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:25 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Roman Mejtesсамый точный ответ будет: "Потому что" :) потому что, так решили разрабы в МС и как по мне такое решение вполне логично и верно. если так сильно прижало, можно наследовать интерфейс в абстрактном классе, а потом через new переопределить этот метод на метод с типом User и радоваться жизни Спасибо, уже разобрался :) http://blogs.msdn.com/b/cyrusn/archive/2004/12/08/278661.aspx Фича действительно мало востребованная, судя по тому, что этот вопрос у меня только сейчас возник. Посмотрел как ее в Nemerle реализовали без поддержки CLR: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Элегантно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:35 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AntonariyДиез Давайте без перехода на личности, ок? :)пока что я про личность ничего не сказал. Диез почему в Java аналогичный фокус работает?@Override - это называется аналогичный? без него же не компилится, да? У вас есть привычка - вы считаете по умолчанию, что оппонент хуже вас разбирается в теме, если задает вопросы. Зря вы так )) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:38 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
википедияИспользование интерфейсов возможно двумя способами: Класс может реализовывать интерфейс. Реализация интерфейса заключается в том, что в описании класса данный интерфейс указывается как реализуемый, а в коде класса обязательно определяются все методы, которые описаны в интерфейсе, в полном соответствии с сигнатурами из описания этого интерфейса . То есть, если класс реализует интерфейс, для любого экземпляра этого класса существуют и могут быть вызваны все описанные в интерфейсе методы. Один класс может реализовать несколько интерфейсов одновременно. Возможно объявление переменных и параметров методов как имеющих тип-интерфейс. В такую переменную или параметр может быть записан экземпляр любого класса, реализующего интерфейс. Если интерфейс объявлен как тип возвращаемого значения функции, это означает, что функция возвращает объект класса, реализующего данный интерфейс.а разработчики java просто решили дать разработчику выстрелить себе в ногу с помощью @Override. фича-то оказалась востребованной. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:41 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariy... Диез почему в Java аналогичный фокус работает?@Override - это называется аналогичный? без него же не компилится, да? Прекрасно компилируется! Код: java 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:49 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезAntonariyпропущено... пока что я про личность ничего не сказал. пропущено... @Override - это называется аналогичный? без него же не компилится, да? У вас есть привычка - вы считаете по умолчанию, что оппонент хуже вас разбирается в теме, если задает вопросы. Зря вы так ))это умолчание? 17666424 или может быть это? 17666660 нет, оппонент не молчал, он активно демонстрировал свой невысокий уровень владения темой. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:49 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезAntonariy... пропущено... @Override - это называется аналогичный? без него же не компилится, да? Прекрасно компилируется! Код: java 1. 2. 3. 4. 5. 6. 7.
ну значит я ошибся насчет назначения этого overrides, а java является еще большим убожеством, чем мне казалось ранее, раз позволяет такие вольности. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 15:53 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariy...ну значит я ошибся ... Уже прогресс Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 16:01 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезУже прогресс Удачи! И что ты этим кому доказал? Тебе Antonariy все на пальцах расписал и не поленился. А ты не только Java не знаешь, но и элементарных основ C#. Но сегодня, надеюсь, ты усвоил урок 5: "Интерфейсы". Уже прогресс. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 16:04 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезAntonariy...ну значит я ошибся ... Уже прогресс Удачи!пфф, какую ерунду мои оппоненты считают прогрессом. наверное по себе судят? я всегда признаю свои промахи. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 16:14 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AxeleronДиезУже прогресс Удачи! И что ты этим кому доказал? Тебе Antonariy все на пальцах расписал и не поленился. А ты не только Java не знаешь, но и элементарных основ C#. Но сегодня, надеюсь, ты усвоил урок 5: "Интерфейсы". Уже прогресс. Удачи! Переформулирую свой первоначальный вопрос более абстрактно: почему в C# нарушается принцип Return Type Covariance, который соблюдается в других языках с ООП, с которыми я знаком(по крайней мере, в Java, Scala, Nemerle)? Вижу, что вы этим вопросом не интересовались. Ну что ж, это не дает мне повод считать, что вы не разбираетесь в основах ООП. У каждого свои интересы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 17:21 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез, Почему Вы уверены, что все языки программирования должны быть одинаковыми и иметь одинаковые инструменты, возможности и функционал? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 17:32 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезAxeleronпропущено... И что ты этим кому доказал? Тебе Antonariy все на пальцах расписал и не поленился. А ты не только Java не знаешь, но и элементарных основ C#. Но сегодня, надеюсь, ты усвоил урок 5: "Интерфейсы". Уже прогресс. Удачи! Переформулирую свой первоначальный вопрос более абстрактно: почему в C# нарушается принцип Return Type Covariance, который соблюдается в других языках с ООП, с которыми я знаком(по крайней мере, в Java, Scala, Nemerle)? Вижу, что вы этим вопросом не интересовались. Что характерно, ответ был дан еще до того, как был задан вопрос: 17665335 Antonariyпричина в том, что это данность. Интерфейсы работают так и никак иначе. http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance This kind of covariance is not supported in C#, and is unlikely to ever be supported. It is not supported by the CLR. чем я в действительности не интересовался, так этой ковариантностью. и ошибся в том, что это способ выстрелить себе в ногу. This is safe because consumers of Contents via Enclosure expect an Animal, and Aquarium promises to not only fulfill that requirement, but moreover, to make a more strict promise: that the animal is always a fish. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 17:56 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AxeleronДиез, Почему Вы уверены, что все языки программирования должны быть одинаковыми и иметь одинаковые инструменты, возможности и функционал? А я ничего подобного не утверждал. Вопрос "почему?" для меня имеет смысл "по какой причине?". Для вас, видимо, смысл другой - "какого хрена?" Извечная проблема неоднозначности естественных языков. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 18:07 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AntonariyДиезпропущено... Переформулирую свой первоначальный вопрос более абстрактно: почему в C# нарушается принцип Return Type Covariance, который соблюдается в других языках с ООП, с которыми я знаком(по крайней мере, в Java, Scala, Nemerle)? Вижу, что вы этим вопросом не интересовались. Что характерно, ответ был дан еще до того, как был задан вопрос: 17665335 Antonariyпричина в том, что это данность. Интерфейсы работают так и никак иначе. http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance This kind of covariance is not supported in C#, and is unlikely to ever be supported. It is not supported by the CLR. чем я в действительности не интересовался, так этой ковариантностью. и ошибся в том, что это способ выстрелить себе в ногу. This is safe because consumers of Contents via Enclosure expect an Animal, and Aquarium promises to not only fulfill that requirement, but moreover, to make a more strict promise: that the animal is always a fish. Простите, мне, сложно всерьез воспринимать информацию, которая начинается со слов "ты тупой?". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 18:12 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез, Нет, я именно спросил то что хотел - почему вы считаете (уверены), что все языки программирования должны быть одинаковыми? Мне стало интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 18:12 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
AxeleronДиез, Нет, я именно спросил то что хотел - почему вы считаете (уверены), что все языки программирования должны быть одинаковыми? Мне стало интересно. Видимо, вам и ответить придется самому, потому что я так не считаю. Есть общие принципы, общие конструкции, концепции. Общие для разных языков. И если в каком-то из ЯП поведение отличает от остальных, возникает вопрос - каковы объективные причины такого поведения. .NET разрабатывали неглупые люди, видимо были на то причины. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 18:27 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезЕсть общие принципы, общие конструкции, концепции. Общие для разных языков. Вы правы, есть: наследование, полиморфизм, абстракция, инкапсуляция. Диез.NET разрабатывали неглупые люди, видимо были на то причины. Ответы: Да и да. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 18:32 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Antonariy@Override - это называется аналогичный? без него же не компилится, да? В Java все методы виртуальные, аннотация (скоммуниздили с .NET аттрибуты) @Override лишь показывает, что мы действительно хотим переопределить метод родителя и компилятор должен проверить наличие у родителя метода с таким именем и сигнатурой, отличает override от overload. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2015, 10:48 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Раз уж заговорили про ко/конрвариантность, значить созрели. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2015, 11:19 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.а смысл разделять их на два интерфейса? 17664287 (там у меня опечатка, естественно, where T : I User) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2015, 11:28 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.а смысл разделять их на два интерфейса? 17664287 (там у меня опечатка, естественно, where T : I User) Я про "нарушение" принципа "Return Type Covariance" в C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2015, 11:44 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезRoman Mejtesсамый точный ответ будет: "Потому что" :) потому что, так решили разрабы в МС и как по мне такое решение вполне логично и верно. если так сильно прижало, можно наследовать интерфейс в абстрактном классе, а потом через new переопределить этот метод на метод с типом User и радоваться жизни Спасибо, уже разобрался :) http://blogs.msdn.com/b/cyrusn/archive/2004/12/08/278661.aspx Фича действительно мало востребованная, судя по тому, что этот вопрос у меня только сейчас возник. Посмотрел как ее в Nemerle реализовали без поддержки CLR: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Элегантно :)Мда, я еще на первой страницу предложил использовать явную реализацию интерфейса. Оказываются некоторые не знают, что это такое, хотя в любой книжке вроде рассказывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 09:00 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Shocker.ProЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели.а смысл разделять их на два интерфейса? 17664287 (там у меня опечатка, естественно, where T : I User)все дело в модификаторах: in (Generic Modifier) (C# Reference) out (Generic Modifier) (C# Reference) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 09:07 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
skyANAДиезпропущено... Спасибо, уже разобрался :) http://blogs.msdn.com/b/cyrusn/archive/2004/12/08/278661.aspx Фича действительно мало востребованная, судя по тому, что этот вопрос у меня только сейчас возник. Посмотрел как ее в Nemerle реализовали без поддержки CLR: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Элегантно :)Мда, я еще на первой страницу предложил использовать явную реализацию интерфейса. Оказываются некоторые не знают, что это такое, хотя в любой книжке вроде рассказывается. Это, видимо, в мой огород камешек? :) Про явную реализацию интерфейсов я знаю, конечно. Вопрос был в другом - ковариантность return-типов не реализована на уровне CLR ( http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance/5709191#5709191 ), но в Nemerle (который тоже поверх CLR) она присутствует. Мне стало интересно, как они это реализовали. Оказалось, совсем просто; тем же методом, который вы предлагали. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 09:45 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезskyANAпропущено... Мда, я еще на первой страницу предложил использовать явную реализацию интерфейса. Оказываются некоторые не знают, что это такое, хотя в любой книжке вроде рассказывается. Это, видимо, в мой огород камешек? :) Про явную реализацию интерфейсов я знаю, конечно. Вопрос был в другом...Может стоило прямо вопрос задать? Изначально он был таков: 17666424 :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 09:49 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
А что показывает этот пример? Имхо, только то, что проперти - это синтаксический сахар, о чем уже говорили в этом топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 09:51 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
ДиезЕвгенийВРаз уж заговорили про ко/конрвариантность, значить созрели. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
А что показывает этот пример?Показывает то, что есть модификаторы in (контрвариантность) и out (ковариантность) :) Если ищете некий сакральный смысл, то это к автору примера :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 10:00 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
skyANA Covariance and Contravariance (C# and Visual Basic) Ну, вариантность в дженериках и делегатах (aka функциональные типы) - это фича заявлена изначально, и вопросов там нет - работает как и везде :) А тут вопрос жизни и смерти про ковариантность возвращаемых значений, которая не сильно нужна, как выясняется ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 10:02 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Диез...вопрос жизни и смерти... Диез...не сильно нужна...вопрос исчерпан :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 10:21 |
|
Комбинирование интерфейсов
|
|||
---|---|---|---|
#18+
Бугага! Прошло пять лет (всего-то), и до проектировщиков C# наконец-то дошло, что return-типы ковариантны по своей сути: https://daveabrock.com/2020/07/14/c-sharp-9-target-typing-covariants "It has been a long time, coming—almost two decades of begging and pleading, actually. With C# 9, it looks like return type covariance is finally coming to the language" Что ты на это скажешь, Илон Маск ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 21:27 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1398457]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
others: | 261ms |
total: | 433ms |
0 / 0 |