Fixed: Реализация двух одинаковых интерфейсов в одном типе
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.10 16:37
Оценка: 150 (13)
Под давлением общественности
Автор: Воронков Василий
Дата: 12.11.10
добавил возможность реализации двух различных воплощений одного и того же интерфейса (с не пересекающимся набором аргументов типа).

Откровенно говоря не знаю зачем это сделал. Видимо просто надоело это обсуждать.

Юзкейс описанный здесь работает, но откровенно говоря не все кишки старой реализации я пока что убрал. Позже постараюсь дорефаткорить код чтобы никаких старых кишков не оставалось. Если кто-то найдет случаи использования в которых есть проблемы с разными воплощениями интерфейсов, то пишите сюда или открывайте новые Issues.

ЗЫ

Вопрос к Никову. Пока реализовывал эту фичу подумал, что в принципе наверно можно было бы пойти чудь дальше и позволить различать интефейсы не на основе только лишь унификации (как это сделано сейчас), а так же еще и учитывать ограничения (констрэйны). Так вот, вопрос в том позволяет ли CLR/Mono реализовывать два воплощения одного интерфейса отличающиеся только констрэйнами (например, один для вэлью-типов, а другой для ссылочных)?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Fixed: Реализация двух одинаковых интерфейсов в одном ти
От: Воронков Василий Россия  
Дата: 27.11.10 15:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вопрос к Никову. Пока реализовывал эту фичу подумал, что в принципе наверно можно было бы пойти чудь дальше и позволить различать интефейсы не на основе только лишь унификации (как это сделано сейчас), а так же еще и учитывать ограничения (констрэйны). Так вот, вопрос в том позволяет ли CLR/Mono реализовывать два воплощения одного интерфейса отличающиеся только констрэйнами (например, один для вэлью-типов, а другой для ссылочных)?


Видимо, да. VB.NET же как-то различает констрейнты и позволяет, к примеру, делать перегрузку по ним.
Re[2]: Fixed: Реализация двух одинаковых интерфейсов в одном
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.11.10 23:08
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Видимо, да. VB.NET же как-то различает констрейнты и позволяет, к примеру, делать перегрузку по ним.


Перегрузка — это другое. С ней проблем нет, так как компилятор подставляет токен конкретного метода. А вот с реализацией интерфейса все будет зависеть от ЦЛР.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Fixed: Реализация двух одинаковых интерфейсов в одном
От: nikov США http://www.linkedin.com/in/nikov
Дата: 29.11.10 21:33
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>VB.NET же как-то различает констрейнты и позволяет, к примеру, делать перегрузку по ним.


Не знаю, что значит "различать констрейнты", но перегрузить в VB два метода в одном типе только по констрейнтам нельзя. Правда, можно перегрузить по констрейнтам extension методы, но только если они в разных модулях (в разных модулях можно вообще одинаковые декларации extension методов написать, только их overload resolution различить не сможет). Приведи пример, что ты имел в виду.
Re: Fixed: Реализация двух одинаковых интерфейсов в одном ти
От: nikov США http://www.linkedin.com/in/nikov
Дата: 29.11.10 21:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вопрос к Никову. Пока реализовывал эту фичу подумал, что в принципе наверно можно было бы пойти чудь дальше и позволить различать интефейсы не на основе только лишь унификации (как это сделано сейчас), а так же еще и учитывать ограничения (констрэйны). Так вот, вопрос в том позволяет ли CLR/Mono реализовывать два воплощения одного интерфейса отличающиеся только констрэйнами (например, один для вэлью-типов, а другой для ссылочных)?


Не совсем понял, что такое констрейнт у воплощения интерфейса. Констрейнты же только у деклараций бывают. Приведи пример кода.
Re[2]: Fixed: Реализация двух одинаковых интерфейсов в одном
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.11.10 14:15
Оценка:
Здравствуйте, nikov, Вы писали:

N>Не совсем понял, что такое констрейнт у воплощения интерфейса. Констрейнты же только у деклараций бывают. Приведи пример кода.

interface I[T] { }

class A[X, Y] : I[X], I[Y] 
  where X: struct
  where Y: class
{
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.