Habituellement, si quelqu'un a spécifié qu'une classe abstraite a une méthode abstraite, c'est soit parce que cette classe dépend de cette méthode pour une partie de ce qu'elle fait, soit parce que cela fait partie d'une API attendue pour la classe parent à mettre en œuvre à ce moment. Dans les deux cas, doit être une implémentation une fois que vous arrivez à une implémentation non-abstraite de la classe.
Notez également que si vous implémentez une interface , vous devez indiquer comment cette interface sera mise en œuvre, même si vous appelez simplement l'abstrait membre et passer la responsabilité sur la sous-classe
public interface IPet {string GetNoise(); int CountLegs(); void Walk();}
public abstract class Pet : IPet
{
public string Name {get; set;}
public abstract string GetNoise(); // These must be here
public abstract int CountLegs();
public abstract void Walk();
}
Quand il s'agit de mettre en œuvre la sous-classe, vous avez quelques choix selon les circonstances. Si votre implémentation est elle-même une classe abstraite, vous ne devriez pas avoir besoin d'implémenter la méthode abstraite.
public abstract class Quadruped : Pet
{
public override int CountLegs() { return 4; }
}
Si votre mise en œuvre est non abstraite, mais la raison standard pour la méthode en question ne vraiment pas appliquer dans votre cas, vous pouvez faire une méthode no-op (dans le cas des méthodes vides), ou renvoyer une valeur fictive, ou même lancer une exception NotImplementedException pour indiquer que la méthode n'aurait jamais dû être appelée en premier lieu.
public class Fish : Pet
{
public override string GetNoise() {return "";} // dummy value: fish don't make noise
public override int CountLegs() {return 0;}
public override void Walk() {} // No-op
// public override void Walk() { throw new NotImplementedException("Fish can't walk"); }
}
Est-ce que cela répond à votre question?
Je ne comprends pas quelle réponse vous voulez? Pouvez-vous s'il vous plaît expliquer votre question en détail? – YoK
"Mais je ne trouve pas de raison de remplir à l'intérieur du corps de la méthode dans la classe abstraite dérivée." Cette citation est ma question. – Freshblood