Изменение подписи типа в C# относительно переопределений

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

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

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

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

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

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

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


person Snark    schedule 10.12.2010    source источник


Ответы (1)


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

person Snark    schedule 16.12.2010