Je suis Tring à faire:Ne peut pas masquer l'erreur du compilateur membre hérité
public abstract class Base
{
public abstract Task Execute();
}
public abstract class Concrete<T> : Base where T : class
{
new public abstract Task<T> Execute();
}
Mais pour une raison quelconque, je reçois l'erreur du compilateur:
CS0533 « Concrete.Execute() » Cuirs héritée membre abstrait 'Program.Base.Execute()
J'ai caché beaucoup de membres dans le passé, mais je n'ai jamais rencontré cette affaire et je suis assez perplexe ici. J'ai passé beaucoup de temps sur MSDN et le web mais je n'ai rien trouvé de ce comportement.
J'apprécierais vraiment tout aperçu sur la question.
Voici the fiddle.
Même s'il manque un 'virtual',' override' a fonctionné pour moi à la place de 'new'. Toutefois, le problème est que vous modifiez le type de retour lorsque vous masquez la valeur de base. Vous devrez changer le nom ou faire en sorte que la sous-classe renvoie la valeur «Task». – Max
@mason Je supposais que le compilateur ramasserait la définition sur le béton (J'ai vu que le type de retour est correctement déduit par IntelliSense quand je fais cela - malgré l'erreur du compilateur). Donc, si je vous comprends bien, le problème est qu'il n'est pas possible de changer la signature lorsqu'on se cache avec 'new'? (J'ai le sentiment que je l'ai fait dans le passé, je me trompe peut-être) –
reddy
@mason voici un exemple de compteur, la signature peut être modifiée avec des propriétés: https://dotnetfiddle.net/B4IkHj il semble que la question est lié à des méthodes/membres abstraits en quelque sorte – reddy