Pergunta

Pergunta ligeiramente diferente sobre a variação desta vez.

Eu tomo isso da experimentação que C# não permite que você substitua uma função virtual por uma função contravariante? Se isso acontecer, como você faz isso, pois continuo recebendo "sobrecarga de método adequado não encontrado". Se não for, por que não? Se a classe base especificar que o valor em sempre será um INT, e a subclasse pode levar um objeto, onde está o problema?

O mesmo para os tipos de retorno, deve ser covariável na assinatura de excesso

Quais idiomas permitem que você faça isso? (C ++/java, estou olhando para você) e se eles deixarem você usar, variação que tipos? (Lista de Tipo/Argumento de Retorno etc.)

Você poderia ter várias substituições? Não vejo por que não enquanto as assinaturas eram tecnicamente únicas.

Por que o C#/CLR não suporta o método de substituição/contra-variação?

Eu li isso e não vejo respostas para nenhuma das perguntas. Eu sei sobre variação genérica e sei que é incrível. Quero saber sobre a variação da assinatura do método, e não apenas em C#, mas também em C#(ou seja, incluindo, mas não limitado a). Se não existir, eu gostaria de uma confirmação disso e uma explicação (é um detalhe de implementação? Minha teoria de tipos está errada? É apenas o CLR/C# não suporta esse recurso em particular? É algo que eu não tenho ' Pensei, já que não preciso lidar com a implementação do CLR e, portanto, não conheço detalhes complexos específicos?)

Foi útil?

Solução

Encontrou a resposta, a seção 10.6.4 na especificação C# afirma que as substituições devem ter a mesma assinatura

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top