Дисперсия сигнатуры типа в C # относительно переопределений - PullRequest
1 голос
/ 10 декабря 2010

немного другой вопрос о дисперсии на этот раз.

Я понял из эксперимента, что C # не позволяет переопределить виртуальную функцию с помощью контравариантной функции?Если да, то как вы это делаете, так как я продолжаю получать «Перегрузка подходящего метода не найдена».Если это не так, почему бы и нет?если базовый класс указывает, что значение в всегда будет int, и подкласс может взять объект, в чем проблема?

То же, что и для возвращаемых типов, должно быть ковариантным в их сигнатуре переопределения

Какие языки позволяют вам это делать?(C ++ / Java я смотрю на вас) и если они позволяют вам использовать, дисперсия, какие типы?(возвращаемый тип / список аргументов и т. д.)

Не могли бы вы иметь несколько переопределений?Я не понимаю, почему не так долго, пока подписи были технически уникальными.

Почему C # / CLR не поддерживает переопределение метода co / contra-variance?

Iпрочитайте это, и я не вижу ответов ни на один из вопросов.Я знаю об общей дисперсии, и я знаю, что это круто.Я хочу знать о дисперсии сигнатуры метода, и не только в C #, но и в C # (т.е. включая, но не ограничиваясь).Если его не существует, я хотел бы получить подтверждение и объяснение (это детали реализации? Является ли моя теория типов неправильной? Просто CLR / C # не поддерживает эту особую функцию? Это то, что у меня нет »я не думаю, что мне приходится иметь дело с реализацией CLR, и поэтому я не знаю конкретных сложных деталей?)

1 Ответ

0 голосов
/ 16 декабря 2010

Нашел ответ, в разделе 10.6.4 спецификации C # говорится, что переопределения должны иметь одинаковую подпись

...